Задать вопрос
@ganjo888

Как использовать updateOrCreate?

Имеется массив со скриншотами
[ 
     {
        "url": "http://asd.ru/qwe.jpg",
        "uploaded": "true"
     },
 {
        "url": "http://asdas.ru/qwe.jpg",
        "uploaded": "true"
     }
  ]

нужно пройтись по массиву и обновить , если есть такой url или создать если нет. При этом вывести не все столбцы а только определенные ('episode_id', 'content', 'meta').

Делаю так
$array = [];
foreach ($params['screenshots'] as $screenshot) {
    $array[] = Material::updateOrCreate([
        'content' => $screenshot['url'],
    ], [
        'episode_id' => $params['episode_id'],
        'type_id'    => 2,
        'profile_id' => 2,
        'content'    => $screenshot['url'],
        'meta'       => true,
    ])->select(['episode_id', 'content', 'meta'])->get();
}

return $array;


Получаю дулированные результаты
{
  "jsonrpc": "2.0",
  "id": 10,
  "result": [
    [
      {
        "episode_id": 1,
        "content": "http:\/\/asd.ru\/qwe.jpg",
        "meta": true
      },
      {
        "episode_id": 1,
        "content": "123.jpg",
        "meta": true
      }
    ],
    [
      {
        "episode_id": 1,
        "content": "http:\/\/asd.ru\/qwe.jpg",
        "meta": true
      },
      {
        "episode_id": 1,
        "content": "123.jpg",
        "meta": true
      }
    ]
  ]
}
  • Вопрос задан
  • 455 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 1
Razgelday
@Razgelday
Попробуй так:
// ...

    $array[] = Material::updateOrCreate([
        'content' => $screenshot['url'],
    ], [
        'episode_id' => $params['episode_id'],
        'type_id'    => 2,
        'profile_id' => 2,
        'content'    => $screenshot['url'],
        'meta'       => true,
    ])->only(['episode_id', 'content', 'meta']); // Используем коллекции

// ...


updateOrCreate возвращает экземпляр объекта, а значит, что к нему можно применять методы коллекций (Laravel Collections) - в данном случае метод only
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы