簡體   English   中英

Laravel / 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM