我真的很难使用自定义模型作为我的支点,并且不明白为什么我们可以为它制作自定义模型,如果我们不能将它用作模型。 我已经看过很多答案和文章,所有人都选择扩展Pivot或Model,但是现实生活中的用法从未被考虑过,而且从来没有比给它一个“命名”类更进一步。
这是我想要实现的一个例子: 我的主要型号: 播放器模型,包含 播放器 表。 游戏型号,带 游戏 表。
播放器和游戏有多对多的关系,我们称之为“派对”并带有“ < em> game_player “table。
现在不太重要,我还有一个得分模型可以保持得分/转弯,派对可以有很多分数,所以 得分 表有一个party_id条目。
所以,这里基本上是我的课程(Laravel 5.2):
播放器
class Player extends Model
{
// The Games this Player is participating to.
public function games() {
return $this->belongsToMany(Game::class)->withPivot('id')->withTimestamps();
}
// The Scores belonging to this Player.
public function parties() {
return $this->hasManyThrough(Score::class, Party::class);
}
// The Custom Pivot (Party) creation for this Player.
public function newPivot(Model $parent, array $attributes, $table, $exists) {
if ($parent instanceof Game) {
return new Party($parent, $attributes, $table, $exists);
}
return parent::newPivot($parent, $attributes, $table, $exists);
}
}
游戏
class Game extends Model
{
// The Players participating into this Game.
public function players() {
return $this->belongsToMany(Player::class)->withPivot('id')->withTimestamps();
}
// The Scores belonging to this Party.
public function parties() {
return $this->hasManyThrough(Score::class, Party::class);
}
// The Custom Pivot (Party) creation for this Game.
public function newPivot(Model $parent, array $attributes, $table, $exists) {
if ($parent instanceof Player) {
return new Party($parent, $attributes, $table, $exists);
}
return parent::newPivot($parent, $attributes, $table, $exists);
}
}
方
class Party extends Pivot
{
protected $table = 'game_player';
// The Player this Party belongs to.
public function player() {
return $this->belongsTo(Player::class);
}
// The Game this Party belongs to.
public function event() {
return $this->belongsTo(Game::class);
}
// The Scores belonging to this Party.
public function scores()
{
return $this->hasMany(Score::class);
}
}
得分
class Score extends Model
{
// The Party this Score belongs to (has "party_id" column).
public function party() {
return $this->belongsTo(Party::class);
}
}
现在,我有两组不同的问题出现,具体取决于我是否在Party上扩展Model或Pivot:
1)当Party延伸Pivot时:
PHP错误:传递给Illuminate \ Database \ Eloquent \ Relations \ Pivot :: __ construct()的参数1必须是Illuminate \ Database \ Eloquent \ Model
的实例
2)当Party扩展Model:
PHP错误:传递给Illuminate \ Database \ Eloquent \ Model :: __ construct()的参数1必须是类型数组,给定对象
问题:
如何在实例化它们时正确使用自定义枢轴模型?
我希望实现以下目标:
谢谢。
答案 0 :(得分:0)
对于我 - 小 - 使用laravel的经验我发现当pivot tables
关联时many-to-many
使用了one-to-many
仅在表A中的特定对象与表B之间保留一个链接。例如,具有角色的用户。
由于您可以成像,因此用户A只需要与角色B建立一个链接/关系。 但是,如果我们想要使用需要在userA和productB之间保留不同记录的数据透视表(例如Sales),会发生什么?我还没有找到直接的方法来做到这一点。
我的解决方案是将intermadiate表视为实际模型,然后与两个表(用户 - 销售和产品 - 销售)建立一对多的关系,然后,如果我需要,将此中间模型与另一个模型相关联。
所以在你的情况下,我有4个明确的模型:
one-to-many
与派对 one-to-one
与派对 many-to-one
得分 | many-to-one
与派对 |使用播放器 one-to-one
$( "div:visible" ).click(function() {
console.log($( this ));
});
与派对 使用这种方法,您还可以更好地控制每个模型的属性。