Я не могу получить данные из связанной таблицы (модели) в Laravel6 - PullRequest
3 голосов
/ 29 апреля 2020

Я не могу получить данные из связанной таблицы.

Есть 3 модели (таблицы).

  • Пользователь
  • Chirp (имеет 'user_id' в качестве внешнего ключа)
  • Нажмите (имеет «chirp_id» в качестве внешнего ключа)

, затем я хочу получить данные User & Click из модели Chirp. Итак, я написал:

Chirp. php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Chirp extends Model
{
    public $timestamps = false;

    protected $guarded = [];

    public function user()
    {
        return $this->belongsTo('App\User');
    }

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

HomeController. php

class HomeController extends Controller
{

    public function index()
    {
        $chirps = Chirp::with(['user','clicks'])
        ->orderBy('posted_at', 'desc')
        ->get();

        return view('home', ['chirps' => $chirps]);
    }
}

home.blade. php

@foreach($chirps as $chirp)
<div>
    <div>by
    <b>{{ $chirp->user->name }}</b>
        on
        <small>{{ $chirp->posted_at }}</small>
    </div>

    <div>
        <p>{{ $chirp->text }}</p>
        <p>{{ $chirp->click->ip_address }}</p>
    </div>
</div>
@endforeach

at home.blade. php, {{ $chirp->click->ip_address }} невозможно получить и получить ошибку "Facade \ Ignition \ Exceptions \ ViewException При попытке получить свойство 'ip_address' необъекта"

Однако, если я удаляю его, я могу правильно получить {{ $chirp->user->name }}.

Почему я не могу получить модель Click из модели Chirp, хотя я могу получить модель пользователя из модели Chirp?

Спасибо вы.

Ответы [ 4 ]

2 голосов
/ 29 апреля 2020

Вам также нужно l oop по вашим кликам:

@foreach($chirps as $chirp)
<div>
    <div>by
    <b>{{ $chirp->user->name }}</b>
        on
        <small>{{ $chirp->posted_at }}</small>
    </div>

    @foreach($chirp->clicks as $click)
        <div>
            <p>{{ $chirp->text }}</p>
            <p>{{ $click->ip_address }}</p>
        </div>
    @endforeach
</div>
@endforeach
1 голос
/ 29 апреля 2020

Для устранения этой проблемы вы можете предпринять следующие шаги:

  1. Проверить, есть ли переменная chirps в контроллере.

    dd ($ chirps);

  2. Если вы знаете, что у вас есть данные, вы можете предпринять шаги, чтобы улучшить ваш клинок. Поскольку существует отношение многих ко многим, вы должны l oop через данные.
    @foreach($chirps as $chirp)
    @foreach($chirp->clicks as $click)
                <div>
                    <p>{{ $chirp->text }}</p>
                    <p>{{ $click->ip_address }}</p>
                </div>
            @endforeach
    @endforeach

1 голос
/ 29 апреля 2020

У вас есть много связей с Chirp и clicks

И здесь вы получаете много кликов вместо клика

@foreach($chirp->clicks as $click)
<p>{{ $click->ip_address }}</p>
@endforeach
1 голос
/ 29 апреля 2020

Chirp имеет много кликов (не клик). Вы должны проповедовать $chirp->clicks в своем клинке.

@foreach ($chirp->clicks as $click)
    <p>This is click id {{ $click->id }}</p>
@endforeach
...