GRo*_*ing 2 php laravel eloquent
Model::firstOrCreate在Laravel 4.2中使用时,有没有办法知道发生了什么,首先还是创建?
让我解释一下,,,我的理解是,使用:: firstOrCreate创建一条记录,如果它不存在,则返回包含参数数组数据的记录值.
所以,如果我有这样的事情:
// Auth::user()->id; returns 7
$person = Persons::firstOrCreate(array(
'approver' => 123,
'receiver' => Auth::user()->id,
'plan' => 'gold',
));
Run Code Online (Sandbox Code Playgroud)
我有这些记录
approver | receiver | plan
____________________________________
123 | 7 | silver
____________________________________
128 | 7 | gold
____________________________________
123 | 7 | platinum
____________________________________
Run Code Online (Sandbox Code Playgroud)
然后将创建一个新记录
approver | receiver | plan
____________________________________
123 | 7 | silver
____________________________________
128 | 7 | gold
____________________________________
123 | 7 | platinum
____________________________________
123 | 7 | gold
____________________________________
Run Code Online (Sandbox Code Playgroud)
如果我再次运行上面的代码,那么将不会创建新值并返回此记录
approver | receiver | plan
____________________________________
123 | 7 | gold
____________________________________
Run Code Online (Sandbox Code Playgroud)
但如果我的代码看起来像这样
$person = Persons::firstOrCreate(array(
'approver' => 123,
'receiver' => Auth::user()->id
));
Run Code Online (Sandbox Code Playgroud)
这些记录将被退回
approver | receiver | plan
____________________________________
123 | 7 | silver
____________________________________
123 | 7 | platinum
____________________________________
123 | 7 | gold
____________________________________
Run Code Online (Sandbox Code Playgroud)
如果我对:: firstOrCreate的理解不正确,请帮助我更好地理解它.
正如我所提到的,我有兴趣知道是否有办法确定是否发生了新记录的创建?
该模型有一个wasRecentlyCreated属性:
$person = Persons::firstOrCreate([
'approver' => 123,
'receiver' => auth()->id(),
'plan' => 'gold',
]);
if ($person->wasRecentlyCreated) {
// $person was created
} else {
// $person was fetched
}
Run Code Online (Sandbox Code Playgroud)
对于旧版本的Laravel,您可以实现您想要的目标firstOrNew:
$person = Persons::firstOrNew([
'approver' => 123,
'receiver' => Auth::user()->id,
'plan' => 'gold',
]);
if (! $person->id) {
$person->save();
// $person was created...
} else {
// $person was fetched...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2183 次 |
| 最近记录: |