gpt4 book ai didi

php - Laravel/Eloquent - 在不使用表名的情况下按模型的关系排序

转载 作者:行者123 更新时间:2023-11-29 11:57:03 27 4
gpt4 key购买 nike

我有一个 Person Eloquent 模型,它 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');

如果可能的话,我将非常感谢我不必引用表名的解决方案。我已经用尽了关于这个主题的所有资源,但这肯定是一个常见的用例。

最佳答案

给你:

$person = new Person;
$relation = $person->address();
$table = $relation->getRelated()->getTable();

$results = $person->join(

$table, $relation->getQualifiedForeignKey(), '=', $relation->getQualifiedOtherKeyName()

)->orderBy($table.'.address_1', 'asc')
->get();

关于php - Laravel/Eloquent - 在不使用表名的情况下按模型的关系排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25349853/

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