我正在尝试更深入地了解 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 表中获取详细信息的语法。
任务有很多附件。来自许多用户的附件属于一项任务。附件属于一个用户。
答案 0 :(得分:1)
如果您在模型中建立了良好的关系并且表格具有遵循 Laravel 命名约定的正确字段,则:
attachments
表具有以下字段:user_id
、task_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);
}