[英]Make Laravel Accessor return query results
更新:
我正在尝试将自己的带有子查询结果的属性添加到主查询的结果中。
现在,我在三个表之间建立了多对多关系:锦标赛,参与者和用户。
这是锦标赛模型中关系的定义:
public function users() {
return $this->belongsToMany('App\User', 'Participants', 'Id_tourn', 'Id_user')->withPivot('Rating');
}
表的结构为:
Users:
-Id
-Name
Participants:
-Id
-Id_user
-Id_tournament
-Final
-Final_place
Tournaments:
-Id
-Name
我需要在最终查询结果中具有额外的Winners
属性,在这里我将获得前三名的信息。
根据文档,我创建了一个访问器并尝试了不同的变体:
那只是冻结系统。 什么也没发生,在30秒内我收到超时错误。
public function getWinnersAttribute() { return Tournaments::where("Id","=",$this->attributes['Id'])->where("Finals","=",1)->limit(3)->orderBy("Final_place","asc")->get(); }
这将返回一个错误,提示“锦标赛”表中没有“最终”列,因此$this
没有关系:
public function getWinnersAttribute() { return $this->where("Finals","=",1)->limit(3)->orderBy("final_place","asc")->get(); }
这将返回空白页,不包含任何内容:
public function getWinnersAttribute() { return $this->with('users')->where("Finals","=",1)->limit(3)->orderBy("final_place","asc")->get(); }
这将返回“ Winners”属性为空:
public function getWinnersAttribute() { return $this->with("users")->where("Finals","=",1)->limit(3)->orderBy("final_place","asc"); }
我已经创建了$appends
变量来应用访问器: protected $appends = ['Winners'];
但是,我已经检查了访问器,它可以工作。 如果我只返回:
public function getWinnersAttribute()
{
return "123";
}
它工作正常,我在主要查询结果的"winners"
属性内得到"123"
。
主要查询是:
Tournaments::with(['users'])->get();
“ Finals
列在“多对多”关系的数据透视表中。
更新:当我尝试不带关系地将查询返回到该模型时:
public function getWinnersAttribute($value)
{
return $this->where("Finals",'=',2);
}
优胜者属性也一无所获。 就像没有执行子查询。
如果我在return的末尾添加get()
:
return $this->where("Finals",'=',2)->get();
我得到空白页。 我该如何解决这个问题?
非常感谢。
如果getWinnersAttribute
在Tournament模型上,则意味着您已经通过执行Tournament::find(1)->winners
来调用一个Tournament模型。一个永久的循环,试图找到一个已经有一个等的新循环。尝试使用$this
代替
public function getWinnersAttribute()
{
return $this->where("finals","=",1)->limit(3)->orderBy("final_place","asc")->get();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.