我正在Laravel 5.6
上构建一个小应用程序,我正在使用Company
模型,我与模型hasMany
有FinancialAndRisk
关系,如下所示:
class Company extends Model {
use SoftDeletes;
protected $fillable = [
'name', 'slug', 'establishment', 'parent_id', 'website', 'updates'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'created_at','updated_at','deleted_at'
];
public function financial()
{
return $this->hasMany('Noetic\Plugins\Conxn\Models\Company\FinancialAndRisk', 'company_id');
}
public function latestFinancial()
{
return $this->hasMany('Noetic\Plugins\Conxn\Models\Company\FinancialAndRisk', 'company_id')->latest()->first();
}
}
现在在某些地方,我想要最新的财务报告,所以我创建了一个函数latestFinancial
但是当我在我的控制器中时,我会做这样的事情:
public function index()
{
$companies = Company::with('latestFinancial')->get();
return response()->json(['companies' => $companies], 200);
}
我收到错误:
{
"message": "Method Illuminate\\Database\\Query\\Builder::addEagerConstraints does not exist.",
"exception": "BadMethodCallException",
"file": "D:\\xampp\\htdocs\\conxn\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Query\\Builder.php",
"line": 2671,
我该如何解决这个问题。
答案 0 :(得分:1)
在你的模型上你应该定义你只想要一个结果的渴望加载,所以不要说hasMany你应该做hasOne:也只是使用 - > latest();这里不需要first()
public function latestFinancial()
{
return $this->hasOne('Noetic\Plugins\Conxn\Models\Company\FinancialAndRisk', 'company_id')->latest();
}
然后它只会给你最新的记录
答案 1 :(得分:1)
问题是->first()
,因为它执行查询。删除它并使用HasOne
:
public function latestFinancial()
{
return $this->hasOne('Noetic\Plugins\Conxn\Models\Company\FinancialAndRisk', 'company_id')->latest();
}
答案 2 :(得分:0)
对我来说,问题是我在查询末尾使用->get()
。
我删除了它,并且查询很好,即
我正式做了
public function priceCategoryEntities()
{
return $this->hasOne((new AppUsersVipPriceCategoriesEntity), 'price_category_id', 'id')->get();
}
但是现在正在使用
public function priceCategoryEntities()
{
return $this->hasOne((new AppUsersVipPriceCategoriesEntity), 'price_category_id', 'id');
}
错误消失了。