laravel-更新模型(!),无需先选择

laravel-更新模型(!),无需先选择,laravel,model,Laravel,Model,我有以下研究模型(雄辩): 我希望Laravel运行update语句(因为我设置了id),但它运行的是insert语句 $research->update()不会做任何事情 在这种情况下,我不想使用array,因为我需要触发雄辩的模型事件 我也不想运行ResearchModel::find(2)之前,这将在我的用例中导致严重的性能问题 有没有办法告诉Laravel通过id进行更新? 如果您不想先“选择”,谢谢。然后你可以直接更新。这将只运行一个查询 $research = ResearchMod

我有以下
研究模型
(雄辩):

我希望Laravel运行
update
语句(因为我设置了
id
),但它运行的是insert语句

$research->update()不会做任何事情

在这种情况下,我不想使用
array
,因为我需要触发雄辩的模型事件

我也不想运行
ResearchModel::find(2)之前,这将在我的用例中导致严重的性能问题

有没有办法告诉Laravel通过
id
进行更新? 如果您不想先“选择”,谢谢。然后你可以直接更新。这将只运行一个查询

$research = ResearchModel::where('id',2)->update([
    'name' => 'test',
]);
按id查找

$research=ResearchModel::find(2);
然后您可以运行更新功能

$research->update(['name'=>“test”]);
如果你不想使用

ResearchModel::find(2);
然后你必须使用路由绑定

肮脏的解决方案:

// Create an instance without insert to database.
$instance = new ResearchModel;
$instance->id = 2;
$instance->name = "test";

// Set the instance status directly.
$instance->exists = true;

// Update database without model.
ResearchModel::where('id', $instance->id)
    ->update(['name' => $instance->name]);

// Manually trigger event.
event('eloquent.updating: App\ResearchModel', $instance);

此方法的前提是您已经拥有所需的数据。如果必须从数据库中读取事件所需的数据,则此方法无效。

谢谢,但我的用例与路由无关,此更新不是由客户端触发的。@fatnjazzy,那么您要更新什么。?孔表或特定行。?如果特定,则您需要正确的id。此选项是否会触发模型事件?另外,这将首先运行查询,还是只是更新?@fatnjazzy,这不会触发事件,因为它使用的是直接mysql查询,而不是雄辩的查询。如果你想使用雄辩,你必须先找到/选择。您可能希望手动触发该事件。
// Create an instance without insert to database.
$instance = new ResearchModel;
$instance->id = 2;
$instance->name = "test";

// Set the instance status directly.
$instance->exists = true;

// Update database without model.
ResearchModel::where('id', $instance->id)
    ->update(['name' => $instance->name]);

// Manually trigger event.
event('eloquent.updating: App\ResearchModel', $instance);