我对Eloquent和L4.2存在问题
我正在尝试在下面设置自定义Pivot模型:
//campaign model
public function users(){
return $this->belongsToMany('User');
}
public function newPivot(Eloquent $parent, array $attributes, $table, $exists){
if ($parent instanceof User) {
return new CampaignUser($parent, $attributes, $table, $exists);
}
return parent::newPivot($parent, $attributes, $table, $exists);
}
//user model
public function campaigns(){
return $this->belongsToMany('Campaign');
}
public function newPivot(Eloquent $parent, array $attributes, $table, $exists){
if ($parent instanceof Campaign) {
return new CampaignUser($parent, $attributes, $table, $exists);
}
return parent::newPivot($parent, $attributes, $table, $exists);
}
在我的自定义枢轴模型“CampaignUser”
之下public function campaign() {
return $this->belongsTo('Campaign');
}
public function User() {
return $this->belongsTo('User');
}
public function facture() {
return $this->belongsTo('Facture');
}
Facture模型有类似于hasMany('CampaignUser')的方法 campaign_user。
我正在尝试做类似的事情:
> $facture->campagne_user
但我得到以下错误:
参数1传递给 Illuminate \ Database \ Eloquent \ Relations \ Pivot :: __ construct()必须是 Illuminate \ Database \ Eloquent \ Model的实例,没有给出,调用 laravel /供应商/ laravel /框架/ SRC /照亮/数据库/锋/ Model.php 在第849行并定义
之前有人遇到过这个问题吗? 我该如何解决?
提前致谢。
答案 0 :(得分:0)
通过尝试实现类似的功能,我得到了同样的错误。
实际上,您不能将pivot作为另一种关系使用,尽管它继承自Model
,但我们可以做的是使用traits来共享 real {{1}之间的代码}和自定义Model
。
在您的示例中,您可以将Pivot
pivot中定义的方法放在特征中:
CampaignUser
然后定义一个继承自模型的trait CampaignUserTrait {
public function campaign() {
return $this->belongsTo('Campaign');
}
public function User() {
return $this->belongsTo('User');
}
public function facture() {
return $this->belongsTo('Facture');
}
}
,并应用特征:
CampaignUser
接下来,您将对自定义数据透视表类执行相同的操作:
class CampaignUser extends Model {
use CampaignUserTrait
}
最后在您的class CampaignUserPivot extends Pivot {
use CampaignUserTrait
}
课程中,只需与Facture
扩展CampaignUser
创建关系:
Model
class Facture extends Model {
public function campaign_user() {
return $this->hasMany('CampaignUser');
}
}
方法现在引用新类:
newPivot
基本上,数据透视和模型共享的任何代码都应该在public function newPivot(Model $parent, array $attributes, $table, $exists){
if ($parent instanceof Campaign) {
return new CampaignUserPivot($parent, $attributes, $table, $exists);
}
return parent::newPivot($parent, $attributes, $table, $exists);
}
。
我对Laravel和PHP一般都是新手,因此,我不会责怪任何人认为这是一个坏主意,或者是否存在更优雅的解决方案。此外,我没有发现任何缺点,但可能有。
问候