我有一个Person
雄辩的模型belongsTo
和Address
。我的Laravel版本是4.2.5,我正在使用PostgreSQL。
class Person extends Eloquent {
public function address() {
return $this->belongsTo('Address');
}
}
我的目标是获取Person
资源的集合,这些资源按其相关Address
模型的address_1字段排序。
我可以通过引用表名来实现这一点,如下所示,但我想用Eloquent关系来做,因为我不想处理用于抽象的表。
Person::join('addresses', 'persons.id', '=', 'addresses.person_id')
->orderBy('address_1', 'asc')->get();
我尝试了以下Eloquent方法但没有成功。
Person::with('address')->whereHas('address', function($q)
{
$q->orderBy('address_1', 'asc');
})->get();
此查询失败,并显示错误消息:
Grouping error: 7 ERROR: column \"addresses.address_1\" must appear in the
GROUP BY clause or be used in an aggregate function
为此,我尝试在orderBy
语句上方添加此行,这会导致查询成功,但排序对生成的Person
集合没有影响。
$q->groupBy('address_1');
我非常感谢一个解决方案,如果可能的话,我不必引用表名。我已经用尽了这个主题的所有资源,但这肯定是一个常见的用例。
答案 0 :(得分:5)
你走了:
$person = new Person;
$relation = $person->address();
$table = $relation->getRelated()->getTable();
$results = $person->join(
$table, $relation->getQualifiedForeignKey(), '=', $relation->getQualifiedOtherKeyName()
)->orderBy($table.'.address_1', 'asc')
->get();