Laravel: 在视图中显示数据而不 Eloquent

Laravel: display data in view without Eloquent

假设我需要在视图中显示文章列表。所以我 运行 一个复杂的查询来获取所有需要的数据,我得到一个结果 table,例如,像这样:

|编号 | article_name | article_body | article_tag_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