我有一个名为Text
的1对多关系的模型pretext()
,将1对多关系商店返回到Text
,如下所示:
class Text extends Model
{
public function pretext(){
return $this->belongsTo('App\Models\Text', 'pretext_id');
}
public function derivates(){
return $this->hasMany('App\Models\Text', 'pretext_id');
}
}
如果$text
没有任何借口(在我的场景中,这意味着$text['pretext_id'] == 0
)$ text-> pretext()将返回$text
本身。当我尝试
public function pretext(){
if ( $this->belongsTo('App\Models\Text', 'pretext_id') ) {
return $this->belongsTo('App\Models\Text', 'pretext_id');
}
else {
return $this;
}
}
我收到错误
local.ERROR:LogicException:Relationship方法必须返回一个类型为Illuminate \ Database \ Eloquent \ Relations \ Relation
的对象
执行else-part时。所以我的问题是:
答案 0 :(得分:1)
尝试动态道具
class Text extends Model
{
protected $appends = ['content'];
public function pretext(){
return $this->belongsTo('App\Models\Text', 'pretext_id');
}
public function getContentAttribute(){
$pretext = $this->pretext()->get();
if ($pretext->count()) {
return $pretext;
}
return $this;
}
}
然后在控制器或视图中,如果您有实例 (如果你有N + 1个问题,请考虑优化它)
$obj = Text::find(1);
dd($obj->content);
答案 1 :(得分:0)
我认为您可以创建另一个调用pretext()并检查返回值的方法。
public function getPretext() {
$value = pretext();
return ($value)? $value : $this;
}