![](/img/trans.png)
[英]Using pivot model data as a relationship to another model in Laravel 4's Eloquent
[英]Laravel/Eloquent - Order By a Model's Relationship Without Using Table Names
我有一個Person
雄辯的模型belongsTo
一個Address
。 我的Laravel版本是4.2.5,我正在使用PostgreSQL。
class Person extends Eloquent {
public function address() {
return $this->belongsTo('Address');
}
}
我的目的是獲得Person
資源的集合,這些資源按其相關Address
模型的address_1字段排序。
我可以通過如下表所示引用表名來完成此操作,但是我想用雄辯的關系來做到這一點,因為我不想出於抽象目的處理表。
Person::join('addresses', 'persons.id', '=', 'addresses.person_id')
->orderBy('address_1', 'asc')->get();
我嘗試了以下口才的方法,但沒有成功。
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.