Php laravel5.1使用雄辩的语言检索不直接相关的属性
我目前不知道如何以一种明智的方式完成这项工作。我不想写太多的疑问。 首先,我的桌子设计:Php laravel5.1使用雄辩的语言检索不直接相关的属性,php,mysql,eloquent,laravel-5.1,relationship,Php,Mysql,Eloquent,Laravel 5.1,Relationship,我目前不知道如何以一种明智的方式完成这项工作。我不想写太多的疑问。 首先,我的桌子设计: 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')
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\u replie\u 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\u replie告诉Elokent有关系?如果您已经知道
ticket\u replie\u id
您需要做的就是:
File::where('ticket_replie_id', $ticket_replie_id)->first();
在更一般的情况下,您可以参考。我想检查一下,用户是否“允许”下载此文件(没有用户可以“猜测”ID并下载与之无关的文件),这就是为什么我想使用
Auth::user()->tickets()
的方法。知道怎么做吗?我会首先识别文件,然后检查用户权限