Laravel 5 - 根据数据库查询显示不同的视图

时间:2016-01-06 13:24:29

标签: laravel-5 laravel-5.1

我有以下数据库设计 Database design

我希望用户能够创建几个不同的文档。每个文档都有自己的视图来创建文档或编辑。

如果他们正在尝试创建的文档已经创建,他们应该会看到该文档的编辑页面。

目前,我有以下

public function create(Project $project)
{
    $documentTypesCreated =
        $project->document()
            ->join('document_type', 'documents.id', '=', 'document_type.documentId')
            ->select('document_type.documentId', 'document_type.name')
            ->get();

    $documentLink = $_GET['documentType'];

    if($documentTypesCreated->isEmpty()){
        return View::make($documentLink.'Doc.create', compact('project'));
    } else {
        foreach($documentTypesCreated as $documentName) {
            if($documentName->name != $documentLink) {
                return View::make($documentLink.'Doc.create', compact('project'));
            } else {
                $document = Document::find($documentName->documentId);
                return View::make($documentLink.'Doc.edit', compact('project', 'document'));
            }
        }
    }
}

打破这个局面,我正在做以下事情: 首先,我获得了为项目创建的所有文档

$documentTypesCreated =
    $project->document()
        ->join('document_type', 'documents.id', '=', 'document_type.documentId')
        ->select('document_type.documentId', 'document_type.name')
        ->get();

然后我获取用户试图通过URL创建的文档

$documentLink = $_GET['documentType'];

因此,假设查询返回此Project有的 卡塞尔文献展 DocumentB

documentLink显示我正在尝试创建DocumentB。

由于已经创建了DocumentB,因此我需要此Document的编辑页面。首先,我检查查询是否返回和Documents

if($documentTypesCreated->isEmpty()){
    return View::make($documentLink.'Doc.create', compact('project'));
} else {

}

如果没有,它将显示所选文档的创建页面。如果确实如此,那么else语句将会启动。 在else语句中,我遍历查询返回的所有文档

foreach($documentTypesCreated as $documentName) {

}

然后我执行以下操作,这就是我的逻辑失败的地方

if($documentName->name != $documentLink) {
    return View::make($documentLink.'Doc.create', compact('project'));
} else {
    $document = Document::find($documentName->documentId);
    return View::make($documentLink.'Doc.edit', compact('project', 'document'));
}

如果查询中的文档名称与我尝试创建的文档不相等,那么我将显示该文档的创建页面。否则,我会显示编辑页面。

现在让我们回到我选择DocumentB的地方。我知道我已经创建了这个文档,所以我应该看到它的编辑页面。但是,因为DocumentA是查询中返回的第一个结果,所以上面的语句如下所示

if("DocumentA" != "DocumentB") {
    return View::make($documentLink.'Doc.create', compact('project'));
} else {
    $document = Document::find($documentName->documentId);
    return View::make($documentLink.'Doc.edit', compact('project', 'document'));
}

因此它将显示DocumentB的创建页面,而不是编辑页面。如果DocumentB是第一个返回的结果,则会显示编辑页面。

我希望这是有道理的。如何让它显示文档的正确视图?

由于

1 个答案:

答案 0 :(得分:1)

控制器

根据您的查询 - 您可以手动设置这些变量

$create = true; 
$edit = false; 

<强>逻辑

if ($query == 'any logic') {
    $create = true; 
    $edit = false; 
}else{
    $create = false; 
    $edit = edit; 

}

然后,将它们发送到您的视图。

查看

@if($create == true)

//.. Show Create Form 

@else

// .. Show Edit Form 

@stop 

然后,您的视图将根据您的查询结果呈现。我希望这有帮助!