gpt4 book ai didi

php - Laravel 4 Eloquent 关系不起作用

转载 作者:行者123 更新时间:2023-12-02 03:00:43 24 4
gpt4 key购买 nike

目前我有一对多关系设置。它的运作方式是一个冠军有许多皮肤。

champions 表有 id, Champion

skins 表包含 id、set、champion、skin、champion_id - 此表中的 champion 字段是多余的,但这只是临时的.

我遇到的问题是,当我调用 skins 表来接收冠军名称时,它会抛出错误。

型号:

class Champion extends Eloquent {

protected $table = 'champions';

public function skin(){
return $this->hasMany('Skin');
}

}

class Skin extends Eloquent {

protected $table = 'skins';

public function champion() {
return $this->belongsTo('Champion');
}

}

Controller :

$champ = Champion::find(2);
foreach ($champ->skin as $c) {
echo $c->set; //outputs the set for id=2
}

$skin = Skin::all();
foreach ($skin as $s) {
echo $s->champion->champion; //errors out.

echo $s->champion; //outputs all champion names (multiple times, if they have multiple skins).
}

我想要输出的是冠军名称,然后是冠军拥有的所有皮肤。也许有人可以帮助告诉我出了什么问题以及为什么这不起作用。我看过Laravel eloquent - One to many relationships本质上与我正在做的事情相同,但仍然不起作用。

示例输出:

champion1
skin1
skin2
skin3

champion2
skin1
skin2

最佳答案

你的关系是正确的, Controller 有缺陷。

问题是您有一个名为 Champion 的字段,并且关系具有相同的名称

我唯一要更改的是关系名称 skin -> skins 以使其变得冗长。

要满足您的需要,请执行以下操作:

// Champion model
public function skins()
{
return $this->hasMany('Skin');
}

// controller
$champions = Champion::with('skins')->get(); // with() means eager loading to avoid n+1 issue

@foreach($champions as $champion)
{{ $champion->id }}
@foreach($champion->skins as $skin)
<div> {{ $skin->set }} </div> // or whatever you like here
@endforeach
@endforeach

现在 Controller 不起作用:

$skin = Skin::all();
foreach ($skin as $s) {

echo $s->champion->champion; // $s->champion is a field on skins table
echo $s->champion; // outputs this field value
}

在这种情况下,您可以这样做(但您不想这样做,而是重命名字段或关系):

echo $s->champion()->first()->id; // fetch related model and output its property

关于php - Laravel 4 Eloquent 关系不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23464356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com