Красноречивые данные «многие ко многим» - PullRequest
0 голосов
/ 31 октября 2018

Итак, ребята, я начинаю изучать Laravel, но в настоящее время я застрял в проблеме, которая не может найти никакого решения ... Я нашел некоторые связанные решения, но после попытки никто не решил мою проблему, так что это :

Я создаю блог, поэтому у меня есть сообщения, теги и категории. Сообщение принадлежит только одной категории, а категории могут принадлежать многим сообщениям, отсюда ... ОК! Теперь сообщения принадлежат многим тегам, поскольку теги принадлежат многим сообщениям ... Проблема!

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

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

Почтовая модель

public function tags()
{
    return $this->belongsToMany('App\Tag');
}

Tag Model

public function posts()
{
    $this->belongsToMany('App\Post');
}

Контроллер тегов (метод удаления)

public function delete($id)
{
    // Get tag by ID
    $tag = Tag::find($id);
    $tag_name = $tag->tag;

    /** Try to check data */
    if($tag->posts->count() > 0) {
        Session::flash('error', 'There is some associated posts to "' . $tag_name . '", delete them before.');
    } else {
        Session::flash('success', 'Tag "' . $tag_name . '" was deleted successfully.');
        //$tag->delete();
    }

    return redirect()->back();
}

Я пробовал

$tag->posts()->get()
$tag->posts->get()
Tag::find(1)->posts->get()
Tag::where('id', [1])->get()

Некоторые другие комбинации, каждая возвращает логическое исключение или фатальную ошибку ...

App\Tag::posts must return a relationship instance

Кнопка просмотра (передача идентификатора)

<a href="{{ route('tags.delete', ['id' => $tag->id]) }}" class="btn btn-sm btn-danger"><i class="fas fa-trash"></i> Delete</a>

Маршрут в web.php

Route::get('/tags/delete/{id}', 'TagsController@delete')->name('tags.delete');

Я очень долго пытаюсь получить данные из множества данных, это начинает становиться очень напряженным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...