【发布时间】:2019-02-20 08:47:43
【问题描述】:
假设:
class List extends Model
{
public function items(){
return $this->hasMany(Items::class, 'c.class_id', 'class_id')
->rightjoin('items_classes as c', 'c.items_id', '=', 'items.id');
}
}
问题是 Eloquent 在外键字段前面加上items,最终查询是:
SELECT * FROM items
RIGHT JOIN items_classes as c ON c.items_id = items.id
// here it is
WHERE items.c.class_id = 10
即使使用DB::raw('c.class_id') 也没有解决问题。
【问题讨论】:
-
您的查询构建代码是什么样的?你如何定义你的查询?另外,在关系方法中也做正确的加入是一种好习惯吗?
-
我同意@Fjarlaegur。对关系方法进行正确的连接不是一个好习惯。相反,创建一个新方法,在那里重用这个方法并在那里附加一个右连接。另外,您显示的
where条件写在哪里? -
@Fjarlaegur 我真的不知道“您的查询构建代码是什么样的?”是什么意思。查询是由这个关系函数生成的。
-
@vivek_23 你能给我一个链接,指向任何旨在提供这种解决方案的文档吗?我需要一个例子。
-
@Omid 对于定义关系的方法,不应附加任何附加内容。这将使它在每次调用
items()时都执行,即使有时不需要它。这将使其紧密耦合。而是创建一个新方法并使用正确的连接将此方法附加到它。另外,如果查询是由这个方法本身生成的,那么就会有一些boot()方法在执行,每次执行时都会附加这个where条件。你能告诉我们那个方法吗?
标签: laravel laravel-5 eloquent eloquent-relationship