#php #laravel #eloquent
Вопрос:
Я написал этот код в Laravel:
$setting = new Setting;
$setting->name = 'name1';
$setting->save();
$setting->name = 'name2';
$setting->save();
после выполнения я вижу только name2
в базе
данных, но после выполнения этого кода:
$setting = new Setting;
$setting->name = 'name1';
$setting->save();
$setting = new Setting;
$setting->name = 'name2';
$setting->save();
обе записи сохранены правильно, поэтому у меня есть name1
и name2
.
Я не могу понять, почему $setting
так важно переназначить переменную с $setting = new Setting;
помощью?
вопрос в том $setting
object of Setting
, почему мы должны переназначить его снова? как это помогает?
как это работает? почему первый отрезанный не работает?
например, в этом фрагменте PHP:
<?php
class Foo{
public $name;
public function bar(){
echo $this->name;
}
}
$obj1 = new Foo;
$obj1->name = 'object_one';
$obj1->bar();
//////$obj1 = new Foo;// we don't need this line in this snippet
$obj1->name = 'object_two';
$obj1->bar();
var_dump($obj1); // answer is object(Foo)#1
Похоже, Ларавель работает с object unique id
этим … где находится соответствующий код в Laravel? где Laravel проверяет идентификатор объекта, чтобы понять, что он должен запускать create
или update
метод?
Комментарии:
1. Это важно, потому что без переназначения
$setting = new Setting
вы изменяете одну и ту же запись , а не создаете новую. Обратите внимание наnew
ключевое слово.
Ответ №1:
Вы могли бы использовать create()
, если у вас есть 'name'
внутри Setting
$fillable
собственности.
Setting::create(['name' => 'name1']);
Setting::create(['name' => 'name2']);
Причина, по которой вам нужно переназначить его в своем коде, заключается в том, что $setting
он привязан к Setting
модели. Если вы не переназначите его, то любая выполняемая вами операция приведет к обновлению вместо вставки нового параметра.
Вот таблица для иллюстрации:
код | $setting |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|