Laravel Polymorphic Relation хранит данные одновременно

У меня есть отношение морфинга между страницами сообщений и таблицей тегов.

Posts
    id
    othercolumn

Pages
    id
    othercolumn

tags
    id
    othercolumn
    tagable_id
    tagable_type

Пример: я хочу добавить сообщение в таблицу сообщений и тег в таблицу тегов одновременно

DB::transaction(function(){
        $post = new Post;
        $post->othercolumn = Input::get('something');

        $tags = new Tag;
        $tag->othercolumn = Input::get('something');


        // here function to store post and tag


        if ( //post or tag not created )
        {
            throw new \Exception('Failed to create post or tag');
        }
    });

если я использую отношение преобразования функции сохранения, например $post->tagable()->save($tag). покажет ошибку tagable_id не может быть нулевым.

вы не можете этого сделать, потому что вам нужен идентификатор сообщения

J. Doe 22.02.2019 10:02

так как я могу получить идентификатор сообщения? если попытаться получить идентификатор сообщения, используя $post- > id, но вернуть null... потому что с помощью транзакции БД... все еще можно сделать этот метод?

Ferdinand 22.02.2019 10:03

создать пост в первом, во втором создать тег

J. Doe 22.02.2019 10:06

если сначала создать сообщение, а затем теги.... как я могу удалить сообщение, если тег не создан... например, транзакция БД... будет откатываться сообщение

Ferdinand 22.02.2019 10:09

если (!$tags->save()) {$post->delete();}

J. Doe 22.02.2019 10:13

хорошо, теперь это работа, спасибо за ваше время ...

Ferdinand 22.02.2019 10:33

@J.Doe, ты должен написать ответ, и ОП должен его принять.

jOpacic 22.02.2019 10:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
252
1

Ответы 1

Вы не можете сохранять модели одновременно, но вы можете удалить первую модель, если вторая не сохранена:

DB::transaction(function(){
    $post = new Post;
    $post->othercolumn = Input::get('something');

    $tag = new Tag;
    $tag->othercolumn = Input::get('something');


    if (!$post->save() || !$tag->save())
    {
        throw new \Exception('Failed to create post or tag');
    }
});

Другие вопросы по теме