【发布时间】:2018-11-11 17:04:14
【问题描述】:
更新:
我正在尝试将我自己的带有子查询结果的属性添加到主查询的结果中。
现在,我在三个表之间建立了多对多关系:Tournaments、Participants 和 Users。
这是锦标赛模型中关系的定义:
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(); } -
这会返回一个错误,即“决赛”列不在 Tournaments 表中,因此
$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);
}
我在获胜者属性中也一无所获。就像子查询没有执行一样。
如果我在返回末尾添加get():
return $this->where("Finals",'=',2)->get();
我得到空白页。 我该如何解决这个问题?
非常感谢。
【问题讨论】:
-
是锦标赛模型上的 getWinnersAttribute 吗?
-
@Casper,是的,是的
-
获胜者实际上是锦标赛对象本身还是参与锦标赛的不同对象?
-
为什么不创建关系?
-
@Pablo,我忘了提。我已经有一个关系,但我的“winners”属性中需要特殊的“where”子句。