Невозможно заставить работать много-много связанных таблиц с помощью настраиваемой сводной таблицы в laravel5.6

В моей модели Post эта функция не работает

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $table = "wp_posts";
    protected $primaryKey = "ID";

    public function taxonomies()
    {
        return $this->belongsToMany('App\Models\TermTaxonomy', 'wp_term_relationships', 'object_id', 'term_taxonomy_id');
    }
}

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

Я подключил Laravel к своей базе данных WP и попытался получить таксономии из сообщений.

Сообщения и таксономии связаны со сводной таблицей wp_term_relationships.

таблица сообщений имеет первичный ключ 'ID'

таблица таксономии имеет первичный ключ term_taxonomy_id

Сводная таблица похожа на 'wp_term_relationships' - 'object_id' ... относится к Post.ID - 'term_taxonomy_id' ... относится к Taxonomy.term_taxonomy_id

Я не знаю, почему это не работает. Если кто знает, пожалуйста, помогите мне. Большое спасибо.

Добавлять

// Taxonomy
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class TermTaxonomy extends Model
{
    protected $table = 'wp_term_taxonomy';
    protected $primaryKey = 'term_taxonomy_id';
}

// in the Controller
public function profile($id)
{
    $teacher = User::isTeacher()->where(['ID' => $id])->with(['posts' => function ($query) {
        $query->where('post_type', 'answer')->take(3);
    }])->firstOrFail();

    $data = [
        'teacher' => $teacher
    ];

    return view('teacher.profile', $data);
}

// in the View
@foreach($teacher->posts as $answer) 
    @php 
    foreach($answer->postParent->taxonomies as $taxonomy) { 
        print($taxonomy->term_id); 
    } 
    @endphp 
@endforeach

добавьте protected $primaryKey = "term_taxonomy_id"; в вашу модель Taxonomy

rkj 09.07.2018 16:08

О, спасибо, это тоже было важно, но я уже сделал это

hanachan1026 09.07.2018 16:11

Sql выглядит странно, когда я пытаюсь получить данные select wp_term_taxonomy.*, wp_term_relationships.object_id` как pivot_object_id, wp_term_relationships.term_taxonomy_id как pivot_term_taxonomy_id из внутреннего соединения wp_term_taxonomy, где wp_term_relationships на wp_term_taxonomy. но здесь 83

hanachan1026 09.07.2018 16:13

Я думаю, что внутреннее соединение работает хорошо, но получение данных из объединенной таблицы не работает

hanachan1026 09.07.2018 16:15

опубликуйте свой класс модели Taxonomy и код, который вы использовали для его получения

rkj 09.07.2018 16:16

@rkj Я отредактировал свой пост и добавил их, спасибо.

hanachan1026 09.07.2018 16:24

используйте $answer->taxonomies вместо $answer->postParent->taxonomies в поле зрения

rkj 09.07.2018 16:27

Я пробовал сейчас и это то же самое

hanachan1026 09.07.2018 16:30

Позвольте нам продолжить обсуждение в чате.

rkj 09.07.2018 16:30

Попробуй отношения без ->take(3).

Jonas Staudenmeir 09.07.2018 16:57

Спасибо, но я пробовал и все еще не работаю @JonasStaudenmeir

hanachan1026 12.07.2018 10:08
Стоит ли изучать 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
11
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

public function profile($id)
{
    $teacher = User::isTeacher()->where(['ID' => $id])->with(['posts' => function ($query) {
        $query->where('post_type', 'answer')->take(3)->with(['postParent' => function ($query) {
            $query->where('post_type', 'question')->with(['taxonomies' => function ($query) {
                $query->where('taxonomy', 'question_category')->with(['term']);
            }]);
        }]);
    }])->firstOrFail();

    $data = [
        'teacher' => $teacher
    ];

    return view('teacher.profile', $data);
}

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