0

命名空间应用程序;

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;
    }
}

这是我的 Event 模型,如您所见,我正在使用 toSearchableArray ,它是 Laravel 侦察功能将“关系”导入到 algolia。然而问题是有时它是空的。所以例如

事件 id 1 具有 entity_id 1

但在另一个例子中

事件 id 2 有 entity_id = null

如何修改此函数以在将实体()关系放入数组之前检查它是否不为空?

4

3 回答 3

1

如果我理解正确,这应该会有所帮助。如果关系不存在,则返回一个空数组,并且 scout 不会更新索引

  public function toSearchableArray()
    {

      if(is_null($this->entities)){
        return [];
         }

       $this->entities

     return $this->toArray();
  }
于 2017-08-16T08:43:21.657 回答
0

请将相关的 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');
}
于 2017-07-27T10:32:02.387 回答
0

我想如果在toArray().

public function toSearchableArray()
{
    $this->entities;

    return $this->toArray();
}
于 2017-07-27T14:27:40.023 回答