Разведчик Laravel проверяет, не пусто ли отношение?

Приложение пространства имен;

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. Однако проблема в том, что иногда он пуст. Так например

идентификатор события 1 имеет entity_id 1

но в другом примере

идентификатор события 2 имеет entity_id = null

Как я могу изменить эту функцию, чтобы проверить, не является ли отношение entity() пустым, прежде чем помещать его в массив?


person Przemek Wojtas    schedule 27.07.2017    source источник


Ответы (3)


если я правильно понимаю, это должно помочь. если отношения не существует, верните пустой массив, и разведчик не будет обновлять индекс

  public function toSearchableArray()
    {

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

       $this->entities

     return $this->toArray();
  }
person sabonzy    schedule 16.08.2017

пожалуйста, обновите внешний_ключ по отношению к этому
user_id как внешний_ключ вместо идентификатора
event_id как внешний_ключ вместо идентификатора

public function users()
{
    return $this->belongsTo('App\User', 'user_id');
}
public function events()
{
    return $this->belongsTo('App\DirtyEvent', 'event_id');
}
person mohamed ali    schedule 27.07.2017

Я думаю, что если загрузить отношение до toArray().

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

    return $this->toArray();
}
person Julien Bourdeau    schedule 27.07.2017