问题是查询无法找到应该与Laravel Eloquent中的方法WITH连接的specific_method(specific_method,specific_model,SpecificModel,specificMethod等...)。任何想法如何解决? 我的代码:
//SpecificModel
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class SpecificModel extends Model {
protected $guard_name = 'web';
protected $table = 'SpecificTable';
protected $guarded = ['id'];
public function specificMethod(){
return $this->belongsTo('App\Models\AnotherModel','AnotherModel_id');
}
}
//AnotherModel
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class AnotherModel extends Model {
protected $guard_name = 'web';
protected $table = 'AnotherTable';
protected $guarded = ['id'];
}
//Query method
$model = app('App\Models\SpecificModel');
$query = $model::with('specificMethod:id,title');
$query = $query->orderBy('specific_method.title','desc');
return $query->get();
//Error
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column
'"specific_method.title"' in 'order clause' (SQL: select * from
`SpecificModel` where `SpecificModel`.`deleted_at` is null order by
`specific_method`.`title` desc)
答案 0 :(得分:0)
这是因为belongsTo关系没有像你期望的那样执行join
查询(正如你从错误中看到的那样)。它执行另一个查询以获取相关模型。因此,您将无法按相关模型列订购原始模型。
基本上,有2个查询发生:
使用SELECT * from originalModel ...*
使用SELECT * from relatedModel where in id (originalModelForeignKeys)
然后Laravel做了一些魔术并将第二个查询中的模型附加到第一个查询中的正确模型。
您需要执行实际join
才能按照您希望的方式订购。