左加入 Laravel Eloquent ORM

时间:2021-04-07 23:20:58

标签: laravel eloquent

我正在尝试更深入地了解 Eloquent ORM 关系,但无法理解这样做:

$a = new Attachments();
$tmp = $a->where( 'attached_to', ATTACHMENTS::ATTACHED_TO_TASK )
           ->where( 'db_id', $task_id )
           ->select( 'db_id', 'user_id', 'attachments.id', 'real_filename', DB::raw( "concat(first_name,' ',last_name) as uploader" ) )
           ->leftJoin( 'users', 'users.id', '=', 'user_id' )
           ->get();

我已经做到了:

$tmp=Tasks::find($task_id)->attachments->where('attached_to',ATTACHMENTS::ATTACHED_TO_TASK);

...而且我可以没有 concat,但我一生都无法弄清楚在同一语句中从 users 表中获取详细信息的语法。

任务有很多附件。来自许多用户的附件属于一项任务。附件属于一个用户。

2 个答案:

答案 0 :(得分:1)

如果您在模型中建立了良好的关系并且表格具有遵循 Laravel 命名约定的正确字段,则:

attachments 表具有以下字段:user_idtask_id

有了这个:

$tasks = Tasks::with('attachments')->where('id', $task->id)->get();

在刀片视图中执行 foreach: @foreach($tasks as $task)

$tasks->attachments->user 应该为您提供所有用户数据。

答案 1 :(得分:1)

感谢@Thomas 所说的,我找到了一个解决方案:

Attachments::with('user')
->where('db_id',$task_id)
->where('attached_to','task')
->get();

在 Attachments::class 中定义的关系为

    public function user(){
        return $this->belongsTo(User::class);
    }
相关问题