Laravel return 条件为真时模型上的空关系
Laravel return empty relationship on model when condidtion is true
我有一个模型,我想在条件发生时 return 一个空值,但是当我尝试获取模型时:
Model::with('shop')->find(id);
我收到这个错误:
"Call to a member function addEagerConstraints() on null"
这是我正在尝试的代码:
public function shop(){
if(true) {
return null;
}
return $this->belongsTo('App\Models\Shop');
}
当 Laravel 关系上的条件为真时,return 的正确方法是什么?
我认为你可以使用这个技巧 - 在满足条件时设置不可能的查询条件:
public function shop(){
return $this->belongsTo('App\Models\Shop')->where(function($query) {
if ($condition) {
// I think this should do the trick
$query->whereNull('id');
}
});
}
将您的查询包装在 rescue 助手中:
// continue processing if an exception happens.
// return some default value if the query does not succeed, null for example.
return rescue(function () {
// some custom logic here
return $this->belongsTo('App\Models\Shop');
}, null);
已更新
对于 5.1 尝试返回一个新的模型实例:
public function shop(){
if(true) {
return new static;
}
return $this->belongsTo('App\Models\Shop');
}
更新 2
尝试返回模型的 query builder:
public function shop(){
if(true) {
return $this->newQuery(); // or newQueryWithoutScopes()
}
return $this->belongsTo('App\Models\Shop');
}
return BelongsTo
实例的正确方法。
public function shop(): BelongsTo
{
if(true) {
return new BelongsTo($this->newQuery(), $this, '', '', '');
}
return $this->belongsTo('App\Models\Shop');
}
我有一个模型,我想在条件发生时 return 一个空值,但是当我尝试获取模型时:
Model::with('shop')->find(id);
我收到这个错误:
"Call to a member function addEagerConstraints() on null"
这是我正在尝试的代码:
public function shop(){
if(true) {
return null;
}
return $this->belongsTo('App\Models\Shop');
}
当 Laravel 关系上的条件为真时,return 的正确方法是什么?
我认为你可以使用这个技巧 - 在满足条件时设置不可能的查询条件:
public function shop(){
return $this->belongsTo('App\Models\Shop')->where(function($query) {
if ($condition) {
// I think this should do the trick
$query->whereNull('id');
}
});
}
将您的查询包装在 rescue 助手中:
// continue processing if an exception happens.
// return some default value if the query does not succeed, null for example.
return rescue(function () {
// some custom logic here
return $this->belongsTo('App\Models\Shop');
}, null);
已更新
对于 5.1 尝试返回一个新的模型实例:
public function shop(){
if(true) {
return new static;
}
return $this->belongsTo('App\Models\Shop');
}
更新 2
尝试返回模型的 query builder:
public function shop(){
if(true) {
return $this->newQuery(); // or newQueryWithoutScopes()
}
return $this->belongsTo('App\Models\Shop');
}
return BelongsTo
实例的正确方法。
public function shop(): BelongsTo
{
if(true) {
return new BelongsTo($this->newQuery(), $this, '', '', '');
}
return $this->belongsTo('App\Models\Shop');
}