#laravel #eloquent
#laravel #красноречивый
Вопрос:
Я застрял в одной ситуации, когда мне приходится вставлять запись, только если значения составных столбцов не существуют с заданным идентификатором пользователя; что-то вроде
UsersInvited::firstOrCreate([
'invited_by_id'=>$eventDetails->user_id,
function($query) use ($thisEmail,$thisPhone){
return $query->where('email',$thisEmail)->orWhere('phone',$thisPhone);
}
]);
Если user_id = 3 является приглашающим участником события, а некоторые участники не зарегистрированы на портале, их необходимо сохранить в одной таблице, чтобы в будущем, если приглашенный пользователь установит приложение, я должен автоматически сделать его участником события.
Любой другой пользователь также может приглашать одних и тех же участников несколько раз.
Итак, в приведенном выше случае я хочу проверить, что thisisemail = abc@gmail.com приглашен user_id = 3 или thisPhone= 8945454545 приглашен тем же приглашающим, тогда нет необходимости делать запись.
Возможно ли это в laravel — eloquent firstOrCreate ()?
Ответ №1:
Использование кода для получения метода firstOrCreate():
public function firstOrCreate(array $attributes, array $values = [])
Следовательно: вы не можете добавлять дополнительные параметры запроса к этому методу.
В вашем случае вы должны попытаться найти соответствующую запись самостоятельно. Если он не существует, вы можете его создать. Например:
$attributes = ['invited_by_id' => '..'];
$instance = Model::where($attributes)->where(..)->orWhere(..)->first();
if( is_null ( $instance ) ) {
$instance = Model::create($attributes);
}
Удачи!
Комментарии:
1.
firstOrCreate()
на самом деле это метод построения, поэтому вы можете вызватьfirstOrCreate()
вместоfirst()
и удалитьis_null()
проверку.