我目前不知道如何以聪明的方式完成这项工作。我想防止写出大量的查询。 首先我的桌子设计:
users:
|id|username|
tickets:
|id|user_id|
ticket_replies:
id|ticket_id|user_id|
files:
|id|ticket_replie_id|name
我的控制员:
user:
public function tickets()
{
return $this->hasMany('App\ticket');
}
ticket:
public function ticket_replie()
{
return $this->hasMany('App\ticket_replie', 'ticket_id', 'id');
}
ticket_replie:
public function file()
{
return $this->hasOne('App\File', 'ticket_replie_id', 'id');
}
关系如下,用户有很多票。每张票都有许多ticket_replies。 ticket_replie有一个附件(文件)。 现在我需要检索给定票证和文件的文件名称。 ticket_replie_id。 在我的控制器中,我现在使用它:
$ticket = Auth::user()->tickets()->where('tickets.id', $id)->where('files.ticket_replie_id', $attachment_id)->firstOrFail();
Laravel为我生成了这个查询&错误:
select * from `tickets` where `tickets`.`user_id` = 1 and `tickets`.`user_id` is not null and `tickets`.`id` = 43 and `files`.`ticket_replie_id` = 39 limit 1
Column not found: 1054 Unknown column 'files.ticket_replie_id' in 'where clause
查询必须类似于:
select * from `tickets`, `files` where `tickets`.`user_id` = 1 and `tickets`.`user_id` is not null and `tickets`.`id` = 43 and `files`.`ticket_replie_id` = 39 limit 1
当我在我的数据库中运行此查询时,它返回所需的信息。我的方式是否可以检索信息?哪里是我的错,因为目前Eloquent生成的查询没有按上述方式工作。如果有更简单的方法,请告诉我。 似乎雄辩不能得到票证和文件之间的关系。如何使用ticket_replie告诉雄辩有关系?
答案 0 :(得分:0)
如果您已经知道ticket_replie_id
,那么您需要做的就是:
File::where('ticket_replie_id', $ticket_replie_id)->first();
在更一般的情况下,您可以参考Eager Loading。