繁体   English   中英

使Laravel Accessor返回查询结果

[英]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属性,在这里我将获得前三名的信息。

根据文档,我创建了一个访问器并尝试了不同的变体:

  1. 那只是冻结系统。 什么也没发生,在30秒内我收到超时错误。

    public function getWinnersAttribute() { return Tournaments::where("Id","=",$this->attributes['Id'])->where("Finals","=",1)->limit(3)->orderBy("Final_place","asc")->get(); }

  2. 这将返回一个错误,提示“锦标赛”表中没有“最终”列,因此$this没有关系:

    public function getWinnersAttribute() { return $this->where("Finals","=",1)->limit(3)->orderBy("final_place","asc")->get(); }

  3. 这将返回空白页,不包含任何内容:

    public function getWinnersAttribute() { return $this->with('users')->where("Finals","=",1)->limit(3)->orderBy("final_place","asc")->get(); }

  4. 这将返回“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM