假设我需要在视图中显示文章列表。因此,我运行一个复杂的查询来获取所有需要的数据,然后得到一个结果表,例如,如下所示:
|编号 |文章名称 |文章正文 |文章标签 ID ...(更多专栏)
还定义了一个模型:Article.php。
问题:在 Laravel 中准备数据以供查看的正确方法是什么?我还想补充一点,我正在寻找一种不使用 Eloquent 的方法来做到这一点。当然,我可以只执行 $articles =
Article::all();
但是如果我正在处理非常复杂的查询并且我需要通过控制加载逻辑来手动加载对象怎么办?
在上面的例子中,我想做的是创建一个模型并将每一行传递给方法 load() ,如下所示:
$model = new Article();
$model.load(row);
array_push($dataForView, $model);
最后发送数据查看
return view('articles')->with('articles', $dataForView);
这是我应该在 Laravel 中做的事情吗?
我不确定您是否想完全避免使用 Eloquent。 但是您可以将复杂的查询抽象为模型上的方法:
// article.php
public function my_complex_query()
{
// code here. Eloquent, or Query Builder or
// Raw SQL
return $result;
}
然后从您的控制器调用它:
return view('the-view')
->withArticles(Article::my_complex_query());
// or you can inject your model into your controller and call $this->article->my_complex_query()
然后循环查看视图中的数据。这就是 eloquent 的美妙之处,因为它将数据库结果映射到一个对象。
@foreach ($articles as $article)
{{ $article->name }}
// ...
@endforeach