当创建和更新将模型返回时,我试图获得与Eloquent相同的结果。
对于查询生成器,当insert返回布尔值并且update返回更新的行的ID时,如何返回模型?!?!?
例如:DB::table('users')->insert( ['email' => 'john@example.com', 'votes' => 0] );
将返回布尔值,相反,我正在寻找的是让创建的用户具有与User::create()
相同的行为。
DB::table('users')->update()
将返回更新后的行的ID,再次,我希望更新后的行作为与User::update()
相同的对象。
我知道insertGetId()
会在我使用insert()
时给我ID,但是我不想采取额外的步骤来使用ID并找到行。
此外,对于更新,我不想使用update()
返回的ID来查找行。
这有意义吗?
答案 0 :(得分:1)
使用insertGetId()
代替insert()
,然后使用find()
模型。例如:
$id = DB::table('users')->insertGetId(['name' => 'Ivanka', 'email' => 'ivanka@ivanka.com']);
$user = User::find($id);
更新时,您拥有id
,因此只需find()
:User::find($id)
。
说明insertGetId()
工作原理的文档:https://laravel.com/docs/5.7/queries#inserts
答案 1 :(得分:0)
此外,如果需要,您也可以从下面的代码中使用。
找到最后一个插入列:
$last_id = Illuminate\Support\Facades\DB::getPdo()->lastInsertId();
然后下一个:
$user = User::find($last_id);