Как извлечь данные из внешних ключей в laravel?

Я новичок в Laravel и плохо разбираюсь в синтаксисе. Я хочу видеть значения другой таблицы через внешний ключ (идентификатор этой таблицы).

https://ibb.co/pXRFRHn На этом рисунке вы можете видеть, что я получаю идентификаторы пользователя и класса. Я хочу, чтобы названия были связаны с этими идентификаторами.

У меня есть таблицы разделов, пользователей и класса. Я использую class_id и user_id в качестве внешнего ключа в таблице разделов. Когда я пытаюсь показать данные, я вижу идентификатор, но я хочу, чтобы имя и другие поля были извлечены из этого идентификатора.

Контроллер

public function index()
{
$sections = Section::all();
$classs = Classs::all();
$users = User::all();

return view('sections.index')->with('sections', $sections)->with('classs', $classs)->with('users', $users);
}

Лезвие/Вид

<div class = "box">
<div class = "box-header">
    <h3 class = "box-title">All Sections</h3>
</div>
<div class = "box-body">
    <table class = "table table-responsive">
        <thead>
        <tr>
            <th>Name</th>
            <th>Class</th>
            <th>User</th>
            <th>Modify</th>
        </tr>
        </thead>
        <tbody>
        @foreach($sections as $cat)
            <tr>
                <td>{{$cat->title}}</td>
                <td>{{$cat->class_id}}</td>
                <td>{{$cat->user_id}}</td>
                <td>
                    <button class = "btn btn-info" data-mytitle = "{{$cat->title}}"
                            data-myclassid = "{{$cat->class_id}}" data-myuserid = "{{$cat->user_id}}"
                            data-catid = {{$cat->id}} data-toggle = "modal" data-target = "#edit">Edit
                    </button>
                    <button class = "btn btn-danger" data-catid = {{$cat->id}} data-toggle = "modal"
                            data-target = "#delete">Delete
                    </button>
                </td>
            </tr>
        @endforeach
        </tbody>
    </table>
</div>

Конкретно...

<td>{{$cat->class_id}}</td>

Отсюда я получаю идентификатор класса, но мне также нужно его имя.

{{$cat->(class_id)->name}}"

Однако это не сработало. Я редактировал модели

 class Classs extends Model
{
//
protected $fillable = [
    'id',
    'title',

];

public function section()
{
    return $this->belongsTo('App\Section');

}}

Модель сечения

class Section extends Model
{
//
protected $fillable = [
    'id',
    'title',
    'class_id',
    'user_id',

];


public function classs()
{
    return $this->hasMany('App\Classs');
}}

$section->class() или $class->section()

Disfigure 07.04.2019 00:40

И, конечно, забудьте IE или Edge;)

Disfigure 07.04.2019 00:42

что ты спрашиваешь, пожалуйста, объясни.

Abdul Rehman 07.04.2019 01:08

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

Abdul Rehman 07.04.2019 21:41

@AbdulRehman, если вам не понравились ответы, которые вы получили на другой вопрос, вы не должны были их принимать.

Nick 08.04.2019 05:39
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
1
5
1 936
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вместо

{{$cat->(class_id)->name}}

пытаться

{{$cat->classs->name}}

Вы обращаетесь к внешнему ключу в таблице разделов с помощью $cat->(class_id), что работает. Но теперь вы хотите запросить отношение через его динамические свойства, для чего требуется $cat->classs->"any properties of classs".

Я только что изменил его, и он дает эту ошибку. Я не знаю, о какой колонке идет речь. SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец «classses.section_id» в «предложении where» (SQL: выберите * из classses, где classses.section_id = 2 и classses.section_id не равно нулю) (Просмотр: C:\xampp \htdocs\jurs1\resources\views\sections\index.blade.p‌​hp)

Abdul Rehman 07.04.2019 01:06

Извините, я недостаточно внимательно проверил. Я считаю, что ваша модель данных неверна. Внешний ключ должен быть определен в модели/таблице "belongsTo". Итак, если отношения в таблицах базы данных правильные, то просто поменяйте местами «belongsTo» и «hasMany» в своих моделях. А потом посмотрите мой предыдущий ответ.

mvb 07.04.2019 01:27

«Пытаюсь получить «титул» свойства не-объекта

Abdul Rehman 07.04.2019 01:31
stackoverflow.com/questions/32469542/… та же проблема, но не могу понять, если вы можете мне помочь, пожалуйста
Abdul Rehman 07.04.2019 01:38

Замените «возвратное представление ('sections.index')-> с ...» на «возвратное представление ('sections.index', compact ('разделы', 'классы', 'пользователи'));'

mvb 07.04.2019 01:45

попробуйте $section->classs, это должен быть массив, потому что отношение hasMany и, возможно, вам следует создать фильтр, чтобы получить правильный идентификатор.

У Eloquent есть еще один способ получить связь с предложением SQL where и другими.

$section->classs()->where('title', 'foo')->first();


Маленькие советы и если вы хотите попробовать.

При возврате представления вы можете с помощью метода ->with() в Laravel использовать компактную функцию php для четкого вызова и кода.


return view('sections.index')->with(compact('sections', 'classs', 'users'));

"Свойство [классы] не существует в этом экземпляре коллекции. (Представление: C:\xampp\htdocs\jurs1\resources\views\sections\index.blade.p‌​hp)"

Abdul Rehman 07.04.2019 01:42

Проверьте, является ли $section var вместо $cat в вашем представлении. Если вы находитесь в петле, это так. Если нет, попробуйте {{dd($section)}} или {{dd($section->classs)}}, чтобы проверить текущее значение вашей переменной.

Disfigure 07.04.2019 01:55

где я должен проверить этот раздел $ в контроллере или лезвии?

Abdul Rehman 07.04.2019 01:58

Фигурные скобки доступны только в шаблоне блейда, поэтому, если вы хотите выполнить отладку в блейде, используйте код в моем комментарии выше. Вы также можете использовать функцию laravel dd($yourVariableName) в своем контроллере.

Disfigure 07.04.2019 02:00

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

Abdul Rehman 07.04.2019 02:13
Ответ принят как подходящий

Это работает для меня... немного долго, но просто

{{ \Illuminate\Support\Facades\DB::table('class')->where('id',$cat->class_id)->value('name')}}

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