如何在 laravel eloquent 中加入三个表?

Posted

技术标签:

【中文标题】如何在 laravel eloquent 中加入三个表?【英文标题】:How to join three table in laravel eloquent? 【发布时间】:2016-04-03 05:49:07 【问题描述】:

我有三张桌子:

consignee (id,name) , jobs(id,consignee_id), expenses(id,job_id)

在我的ExpensesController

public function index()
        $expenses = \App\Expense::all();
        return view('expenses.index', compact('expenses'));

在我的索引视图页面中,我想在我的视图页面中获取费用表中的所有详细信息以及收货人姓名

@foreach($expenses as $expense)
<tr>
  <td >!! $expense->id !!</td>
<td >!! $expense->date !!</td>
<td >!! $expense->job_id !!</td>
<td >!!$expense-> !!</td></tr>
                        @endforeach

我不知道如何在我的索引视图中获取收货人名称任何人建议我的想法

【问题讨论】:

【参考方案1】:

代替:

$expenses = \App\Expense::all();

你可以使用:

$expenses = \App\Expense::select('expenses.*','consignee.name')
            ->leftJoin('jobs','jobs.id','=','expenses.job_id')
            ->leftJoin('consignee','consignee.id','=','jobs.consignee_id') 
            ->get();

这样你就可以加入另外 2 个表并获得收货人的名字。

【讨论】:

好的,如何在我的视图中使用它来获取 name?在这里&lt;td width="10%"&gt;!!$expense-&gt; !!&lt;/td&gt;&lt;/tr&gt; @HamelRaj 简单 !! $expense-&gt;name !! 在 json 中我会得到名称:" " 但是当我使用 !!$expense-&gt;name !! 时空无输出?? @HamelRaj 你确定你从 DB 得到任何结果吗?运行SELECT expenses.*, consignee.name FROM expenses LEFT JOIN jobs ON jobs.id = expenses.job_id LEFT JOIN consignee ON consignee.id = jobs.consignee_id,你会看到你的数据库中有什么。 非常非常抱歉先生,这是我的错误,非常感谢 :)

以上是关于如何在 laravel eloquent 中加入三个表?的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以避免在 Laravel 5.7 Eloquent 中加载父级时加载这些 $with 模型?

Laravel cviebrock/eloquent-sluggable 将 @ 作为前缀或在路由中过滤它

如何在 Laravel/Eloquent 中获得完整的关系

如何使用 eloquent 在 laravel 中编写多个连接

如何在 Laravel 5.8 中使用 Eloquent 进行查询?

如何使用 Eloquent 在 Laravel 中开始查询?