Возвращает значение по умолчанию, если отношение ownTo возвращается null - PullRequest
0 голосов
/ 21 марта 2020

У меня есть отношение ownTo, если условие соединения соответствует, тогда хорошо, но когда нет данных для этого, это возвращает нуль. В этом случае я хочу, чтобы он возвращал значение по умолчанию, как я ожидал. Это то, что я пытаюсь, но это не успех. Пожалуйста, помогите мне?

class Task extends Model
{
    use SoftDeletes;

    protected $table = 'tasks';
    protected $fillable = [
        'name',
        'description',
        'project_id',
    ];
    protected $with = ['project', 'status'];

    // this is expected
    public function getProjectAttribute($value)
    {
        return $value ?? ['id' => '', 'name' => ''];
    }

    /**
     * @return App\Modules\Com\Models\Project
     */
    public function project()
    {
        return $this->belongsTo(Project::class, 'project_id', 'id')->select(['id', 'name']);
    }
}

С атрибутом description я могу переопределить его, но почему я не делаю то же самое с атрибутом проекта? И как мне установить, где для связи проекта?

Как эта задача :: выберите (*) -> проект () -> где ('имя_проекта', 'AB C');.

1 Ответ

1 голос
/ 21 марта 2020

Я никогда не использовал Laravel - но ... документация показывает, что вы можете установить значение по умолчанию для ownTo при использовании его для обновления, чтобы избежать условных проверок. Возможно, это будет работать и для выбора.

Вы можете попробовать добавить значение по умолчанию в конце вашего звонка.

        return $this->belongsTo(Project::class, 'project_id', 'id')
               ->select(['id', 'name'])
               ->withDefault([
                     'project_id' => 'project.name',
                      'id' => 'ABC',
               ]);

Источник: https://laravel.com/docs/6.x/eloquent-relationships#default -модели

или

Вы можете сделать условную проверку:

public function project()
{
    $return $this->belongsTo(Project::class, 'project_id', 'id')->select(['id', 'name']);

    if( $return === null )
      // return your default values
    else
      return $return;
}
...