Laravel firstOrCreate具有先进的功能

时间:2016-10-13 05:56:05

标签: laravel eloquent

我遇到了一种情况,即只有在给定用户ID不存在复合列值的情况下才必须插入记录;

之类的东西
UsersInvited::firstOrCreate([
                            'invited_by_id'=>$eventDetails->user_id,
                            function($query) use ($thisEmail,$thisPhone){
                                return $query->where('email',$thisEmail)->orWhere('phone',$thisPhone);
                            }
                        ]);

如果user_id = 3是事件的邀请者而某些成员未在门户中注册,则他们必须保留在一个表中,以便将来如果受邀用户将安装该应用程序,那么我必须自动将其设为活动成员。

任何其他用户也可以多次邀请相同的成员。

所以在上面的例子中,我想检查thisEmail = abc@gmail.com是否被user_id = 3邀请,或者thisPhone = 8945454545被同一个邀请者邀请,然后无需输入。

是否有可能在laravel中 - 雄辩的第一次创造()?

1 个答案:

答案 0 :(得分:0)

使用代码获取方法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);
}
祝你好运!