Проверка Laravel: с областью действия "Нет результатов запроса для модели" - PullRequest
1 голос
/ 23 апреля 2019

Имея эту модель:

class Subject extends BaseEntity implements Treeable
{
    use NodeTrait;
    protected $table = 'subjects';

    protected $rules = [
        'label' => 'max:255',
        'parent_id' => 'exists:subjects,id' // <--
    ];

    protected function getScopeAttributes()
    {
        return [ 'user_id' ];
    }
}

Затем я создаю новый экземпляр (parent_id ссылается на тот же идентификатор таблицы, а идентификатор 3 существует):

Subject::create([ 
   'label' => 'foo',
   'parent_id' => 3
])

Это приводит к двум запросам:

select count(*) as aggregate from subjects where id = 3 (дает ожидаемый результат 1)

select * from subjects where subjects.user_id is null and subjects.id = 3 (пустое выдача результата No query results for model [App\\Subject] 3 исключение)

Я обнаружил, что дополнительный subjects.user_id is null добавлен из-за области действия, но как я могу добавить это к проверке? Либо его следует удалить, либо установить каким-либо образом в полезной нагрузке при создании или динамически с помощью auth()->id. Кто-нибудь может помочь с этим?

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Хорошо, разобрался. Речь идет не о проверке, я должен был добавить 'user_id' в качестве параметра перед 'parent_id', например так:

Subject::create([ 
   'label' => 'foo',
   'user_id' => auth()->id(),
   'parent_id' => 3
])
0 голосов
/ 23 апреля 2019

введите код здесь

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

public static function boot() 
{ 
  parent::boot();

// create a event to happen on updating 
  static::updating(function($table) { 
      $table->user_id = Auth::user()->id; 
});

// create a event to happen on saving 
   static::saving(function($table) {
      $table->user_id = Auth::user()->id; 
 }); 

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...