как использовать firstOrNew, если он первый или новый

php laravel laravel-5.2

2899 просмотра

3 ответа

Я хочу использовать firstOrNew примерно так:

table::firstOrNew(['ip'=>'15.25.36.12', 'linke'=>'http://example.com'])
->where('created_at','>=',date('Y-m-d H:i:s', time()-86400);

я использовал что-то такое:

    $data = table::where('ip', '15.25.36.12')->where('link','http://example.com')->
where('created_at','>=', date('Y-m-d H:i:s', time()-86400));
    if(!$data->exists())
    {
      $data = new table;
      $data->field = 'foo';
      $data->save(); 
    }

но это не сработало очень хорошо! Потому что это добавить 2 строки же

Автор: Mikel Williams Источник Размещён: 08.11.2019 11:20

Ответы (3)


1 плюс

Для пояснения firstOrNew ищет запись в базе данных с заданной информацией. Если найдено, то возвращает экземпляр модели, содержащий информацию о записи, иначе только создает новый экземпляр модели, он не сохраняет содержимое, для этого вам нужно вручную сохранить сохранение.

пример

// Assuming that this record does not exist in database
$a = Table::firstOrNew([
    'name' => 'John Doe',
    'age'  => 16
]); 

$a->nickname = "jDoe";
$a->save(); // Save the record to the database using insert

Это дает вам возможность добавить другую релевантную информацию к объекту перед сохранением.

Чтобы создать запись в самый момент, используйте функцию firstOrCreate . Он также вернет экземпляр модели, но в то же время создал бы запись. Теперь, если вы сохраните файл, он запустит запрос на обновление.

пример

// Assuming that this record does not exist in database
$a = Table::firstOrCreate([
    'name' => 'John Doe',
    'age'  => 16
]); 

$a->nickname = "jDoe";

// Fires a update query as opposed to insert query in above example
$a->save();
Автор: Max Gaurav Размещён: 23.08.2016 09:53

0 плюса

из документов:

«Метод firstOrCreate попытается найти запись базы данных, используя заданные пары столбец / значение. Если модель не может быть найдена в базе данных, запись будет вставлена ​​с заданными атрибутами».

«Метод firstOrNew, например firstOrCreate, попытается найти в базе данных запись, соответствующую заданным атрибутам. Однако, если модель не найдена, будет возвращен новый экземпляр модели. Обратите внимание, что модель, возвращенная firstOrNew, еще не сохранена. в базу данных. Вам нужно будет вызвать сохранить вручную, чтобы сохранить его. "

Так что либо save()твой новый рекорд, либо используйfirstOrCreate

Автор: Loek Размещён: 20.08.2016 05:34

0 плюса

Попробуйте этот код

$data = table::updateOrCreate([
                              'ip'=>'15.25.36.12', 
                              'linke'=>'http://example.com'
                               ],[
                               'field' => 'foo'
                             ])
                    ->whereDate('created_at', '>=',Carbon::now()->subDay());
Автор: Parithiban Размещён: 20.08.2016 06:14
Вопросы из категории :
32x32