gpt4 book ai didi

php - Laravel 5 Eloquent 关系 "Has Many Through"SQL 异常

转载 作者:行者123 更新时间:2023-11-29 02:21:38 25 4
gpt4 key购买 nike

你好。昨天我花了 6 个多小时来了解 Laravel 5 中的 ORM 关系是如何工作的。但我还不是很熟悉。

经过数百个错误、测试、研究等......我使我的一部分关系正常工作。


模型之间的关系:

/* User.php (Model) */
public function lists() {
return $this->hasMany('App\ListModel');
}
public function tasks() {
return $this->hasManyThrough('App\Task', 'App\ListModel',
'user_id', 'list_id');
}

/* ListModel.php */
protected $table = 'lists';

public function user() {
return $this->belongsTo('\App\User', 'list_id');
}
public function tasks() {
return $this->hasMany('App\Task', 'list_id');
}

/* Task.php (Model) */
public function listModel() {
return $this->belongsTo('App\ListModel', 'list_id');
}

在 Controller 中工作的内容:

/* Returning all tasks (I have only one user yet. All tasks belongs to him) */
$request->user()->tasks()->get();

/* Working - Returning the list | lists */
$list = $request->user()->lists()->where('id', 'some-id')->first();
$lists = $request->user()->lists()->get();

发生异常的地方

/* Next line throws the SQL Exception */
$task = $request->user()->tasks()->where('id', '5')->first();

异常:

SQLSTATE[23000]:
Integrity constraint violation: 1052
Column 'id' in where clause is ambiguous
(SQL: select `tasks`.*, `lists`.`user_id` from `tasks`
inner join `lists` on `lists`.`id` = `tasks`.`list_id` where
`tasks`.`deleted_at` is null and `lists`.`deleted_at` is null
and `lists`.`user_id` = 1 and `id` = 5 limit 1)
/* The problem in where clause ^^^^^^^ */

laravel 生成的 SQL 查询不工作。我认为必须定义id 的表。

注意:ListModel 类使用protected $table = 'lists'。在 PHP (T_LIST) 中,List 词是原生的。这个表名更改让我感到恶心。 Laravel 关于“ORM 自定义键”的文档有点小。

感谢您的宝贵时间。

最佳答案

问题实际上出在 QueryBuilder 中。

$request->user()->tasks() 返回 QueryBuilder
我不确定它是如何工作的。但我认为 where() 函数添加了额外的 SQL。

解决方案:

我改变了这一行:

$task = $request->user()->tasks()->where('id', '5')->first();

收件人:

$task = $request->user()->tasks()->where('tasks.id', '5')->first();

tasks 是数据库中的表,id 是列。

关于php - Laravel 5 Eloquent 关系 "Has Many Through"SQL 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30843909/

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