在查询生成器中插入和更新后如何获取产品

时间:2019-01-18 15:33:57

标签: laravel laravel-5 laravel-query-builder

当创建和更新将模型返回时,我试图获得与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来查找行。

这有意义吗?

2 个答案:

答案 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);