我正在使用多对多(多态)口才关系来连接模型。问题是Creadores
表的类型可以是artista
表中的autor
或Creaciones
。
可以告诉Eloquent何时使用artista
或autor
吗?
如果我将Creador
模型扩展到另外两个模型Artista
和Autor
中,它将起作用。但是当我想使用creaciones
模型显示creador
的所有Creador
时,那是不可能的,因为多态关系是用扩展模型创建的。
Libro型号:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use ChrisKonnertz\BBCode\BBCode;
class Libro extends Model
{
protected $table = 'Libros';
// Return all the artists of the book
public function artistas()
{
return $this->morphedByMany('App\Creador', 'creador', 'creaciones');
}
// Return all the authors of the book
public function autores()
{
return $this->morphedByMany('App\Creador', 'creador', 'creaciones');
}
}
储物箱型号:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Creador extends Model
{
protected $table = 'creators';
// Return all the books where author
public function autorLibros()
{
return $this->morphToMany('App\Libro', 'creador', 'creaciones');
}
// Return all the books where artist
public function artistaLibros()
{
return $this->morphToMany('App\Libro', 'creador', 'creaciones');
}
}
答案 0 :(得分:1)
您最好将type
/ Creador
的{{1}}属性添加到'artista'
。
多态关系只能采用一个模型。 因此您的代码将变为:
'autor'
答案 1 :(得分:0)
通过以下方式解决。将withPivot
和wherePivot
的关系从多态多对多关系更改为普通多对多关系。
餐车型号
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Creador extends Model
{
protected $table = 'creators';
public function libros()
{
return $this->belongsToMany('App\Libro', 'creaciones')->withPivot('creador_type');
}
// All books as an Artist
public function librosArtista()
{
return $this->libros()->wherePivot('creador_type', 1);
}
// All books as an Author
public function librosAutor()
{
return $this->libros()->wherePivot('creador_type', 2);
}
}
Libro模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use ChrisKonnertz\BBCode\BBCode;
class Libro extends Model
{
protected $table = 'libros';
public function creador()
{
return $this->belongsToMany('App\Creador', 'creaciones')->withPivot('creador_type');
}
// All book artists
public function artistas()
{
return $this->creador()->wherePivot('creador_type', 1);
}
// All book authors
public function autores()
{
return $this->creador()->wherePivot('creador_type', 2);
}
}
在创建将Creador
附加到Libro
时:
$libro->artistas()->attach( $creador, [
'creador_type' => 1
]);