Laravel scout 检查关系是否不为空?
Laravel scout check if relation is not empty?
命名空间应用;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Laravel\Scout\Searchable;
class Event extends Model
{
protected $table = 'events';
public $timestamps = true;
use Searchable;
use SoftDeletes;
protected $dates = ['deleted_at'];
public function entities()
{
return $this->belongsTo('App\Entity', 'entity_id');
}
public function users()
{
return $this->belongsTo('App\User', 'id');
}
public function events()
{
return $this->belongsTo('App\DirtyEvent', 'id');
}
public function toSearchableArray()
{
$data = $this->toArray();
$data['entities'] = $this->entities->toArray();
return $data;
}
}
这是我的事件模型,如您所见,我正在使用 toSearchableArray,它是 Laravel scout 函数将 'relations' 导入 algolia。但是问题是有时它是空的。例如
event id 1 has entity_id 1
但在另一个例子中
event id 2 has entity_id = null
如何修改此函数以在将它放入数组之前检查 entities() 关系是否不为空?
请更新 foreign_key 相关
user_id 作为 foreign_key 而不是 id
event_id 作为 foreign_key 而不是 id
public function users()
{
return $this->belongsTo('App\User', 'user_id');
}
public function events()
{
return $this->belongsTo('App\DirtyEvent', 'event_id');
}
我认为如果在 toArray()
之前加载关系。
public function toSearchableArray()
{
$this->entities;
return $this->toArray();
}
如果我理解正确,这应该有所帮助。如果关系不存在 return 一个空数组并且 scout 不会更新索引
public function toSearchableArray()
{
if(is_null($this->entities)){
return [];
}
$this->entities
return $this->toArray();
}
命名空间应用;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Laravel\Scout\Searchable;
class Event extends Model
{
protected $table = 'events';
public $timestamps = true;
use Searchable;
use SoftDeletes;
protected $dates = ['deleted_at'];
public function entities()
{
return $this->belongsTo('App\Entity', 'entity_id');
}
public function users()
{
return $this->belongsTo('App\User', 'id');
}
public function events()
{
return $this->belongsTo('App\DirtyEvent', 'id');
}
public function toSearchableArray()
{
$data = $this->toArray();
$data['entities'] = $this->entities->toArray();
return $data;
}
}
这是我的事件模型,如您所见,我正在使用 toSearchableArray,它是 Laravel scout 函数将 'relations' 导入 algolia。但是问题是有时它是空的。例如
event id 1 has entity_id 1
但在另一个例子中
event id 2 has entity_id = null
如何修改此函数以在将它放入数组之前检查 entities() 关系是否不为空?
请更新 foreign_key 相关
user_id 作为 foreign_key 而不是 id
event_id 作为 foreign_key 而不是 id
public function users()
{
return $this->belongsTo('App\User', 'user_id');
}
public function events()
{
return $this->belongsTo('App\DirtyEvent', 'event_id');
}
我认为如果在 toArray()
之前加载关系。
public function toSearchableArray()
{
$this->entities;
return $this->toArray();
}
如果我理解正确,这应该有所帮助。如果关系不存在 return 一个空数组并且 scout 不会更新索引
public function toSearchableArray()
{
if(is_null($this->entities)){
return [];
}
$this->entities
return $this->toArray();
}