gpt4 book ai didi

php - laravel5.1 使用 Eloquent 检索不直接相关的嵌套属性

转载 作者:可可西里 更新时间:2023-11-01 08:40:04 26 4
gpt4 key购买 nike

我目前不知道如何以巧妙的方式完成这项工作。我想避免编写大量查询。首先是我的表格设计:

users:
|id|username|

tickets:
|id|user_id|

ticket_replies:
id|ticket_id|user_id|

files:
|id|ticket_replie_id|name

我的 Controller :

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_replie 只能与一个附件相关(每个 ticket_replie 只有一个附件),这就是我使用 hasOne 关系的原因。现在我需要检索给定票证和 ticket_replie_id 的文件名。在我的 Controller 中,我现在使用它:

 $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 生成的查询并没有像上面描述的那样工作。如果有更简单的方法,请告诉我。

我知道 eagerload,我试过这个:

$ticket = Auth::user()->tickets()->with(['file'=>function($f) use ($attachment_id) { $f->where('files.ticket_replie_id', $attachment_id); } ])->where('tickets.id', $id)->where('files.ticket_replie_id', $attachment_id)->firstOrFail();`. 

结果是:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'files.ticket_replie_id' in 'where clause' (SQL: 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) 

故障是因为工单和文件模型之间没有直接的“关系”还是我错了?

最佳答案

你必须预先加载你的关系,然后你可以应用 where 条件。看,这是例子。

$courses = Courses::with(['quizzes','chapters'=>function($q){
$q->where('status','1')->orderBy('orderby','ASC');
},'chapters.quizzes','chapters.lessons'=>function($q) use ($lessonid){
$q->where('status','1')->orderBy('orderby','ASC');
},'chapters.lessons.quizzes'])->where('status','1')->where('id',$courseid)->first();

with([]) 用于加载模型关系,例如:quizzes 是与 quiz table 的关系,chapters=>function($q)。 ... 它也是一个关系,但我正在对章节关系等应用条件

我希望这对你有意义

关于php - laravel5.1 使用 Eloquent 检索不直接相关的嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35301660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com