Как получить данные из связанной таблицы в laravel - PullRequest
0 голосов
/ 31 октября 2019

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

Вот мой контроллер

<?php

namespace App\Http\Controllers;

use App\Animal;
use App\Clinic;
use App\Role;
use App\Slaughter;
use Illuminate\Foundation\Auth\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;


class ClinicController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */

    public function __construct()
    {
        $this->middleware('auth');
    }

    public function index()

    {

        $farms = User::where('role_id', 3)->get();
        $user = Auth::user();
        $animal = Animal::all();
        return view('clinic.index', compact('user', 'animal', 'farms'));
    }
 public function show($id)
    {
        $farm = User::query()->findOrFail($id);
        return view('clinic.show', compact('farm'));
    }

При получении пользователя, который в моем случае является Ферма, яхотел бы, чтобы животные, которых администратор фермы зарегистрировал через эти отношения

Model

class Clinic extends Model
{
    protected $guarded = [];

    public function user(){
        return $this->belongsTo(User::class);
    }
}

От My tinker, отношения работают отлично.

Route::get('/clinic/{farm}', 'ClinicController@show');

И, наконец, шоу view, где я получаю все ошибки

 @extends('layouts.app')

 @section('content')
 <br><br><br><br><br><br>
 <div class="container">
       <div class="row justify-content-center">
             <div class="col-md-20">
                   <div class="card">
                         <div class="card-header">
                               <center>
                                     <h1>Farm Dashboard</h1>
                               </center>
                         </div>

                         <div class="card-body">
                               @if (session('status'))
                               <div class="alert alert-success" role="alert">
                                     {{ session('status') }}
                               </div>
                               @endif

                               <center>
                                     <h2>Welcome! <strong>{{ Auth::user()->name }}</strong></h2>
                               </center>
                               <hr>
                               <br>
                               <div class="container box">
                                     <div class="table-responsive">
                                           <table class="table table-striped table-bordered" style="background: white">
                                                 <thead>
                                                       <tr>
                                                             <th>Id</th>
                                                             <th>Animal Type</th>
                                                             <th>Sex</th>
                                                             <th>Farm</th>
                                                             <th>Clinic</th>
                                                             <th>Vaccination</th>
                                                             <th>Nutrition</th>
                                                       </tr>
                                                 </thead>
                                                 @foreach( $farm as $farm)
                                                 <tbody>
                                                       <tr>
                                                             <td>{{ $farm->animals->id }}</td>
                                                             <td>{{ $farm->animals->type->category }}</td>
                                                             <td>{{ $farm->animals->gender }}</td>
                                                             <td>{{ $farm->animals->user->name }}</td>
                                                             @if(! $farm->animals->clinic)
                                                             <td>N/A</td>
                                                             <td>N/A</td>
                                                             <td>N/A</td>
                                                             <td>
                                                                   <a href="/clinic/{{ $farm->animals->id }}/create">
                                                                         <button type="button" class="btn btn-primary">
                                                                               Attach Clinic Detail
                                                                         </button>
                                                                   </a>
                                                             </td>
                                                             @elseif( $farm->animals->clinic)

                                                             <td>{{ $farm->animals->clinic->user->name }}</td>
                                                             <td>{{ $farm->animals->clinic->vaccination ?? 'N/A' }}</td>
                                                             <td>{{ $farm->animals->clinic->nutrition ?? 'N/A'}}</td>

                                                             <td>
                                                                   <a
                                                                         href="/clinic/{{ $farm->animals->clinic->id }}/edit">
                                                                         <button type="button"
                                                                               class="btn btn-primary">Edit Animal
                                                                               Clinic details</button>
                                                                   </a>
                                                             </td>
                                                             @endif
                                                       </tr>
                                                 </tbody>
                                                 @endforeach
                                           </table>
                                     </div>
                               </div>
                         </div>
                   </div>
             </div>
       </div>
 </div>

 @endsection

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

Попытка получить свойство 'animals' необъекта

Ответы [ 3 ]

1 голос
/ 31 октября 2019

эта настройка позволяет получить всех животных всех пользователей конкретной клиники. Я также использовал привязку маршрута / модели в вашем методе show (). Какой бы идентификатор вы ни указали в URL, он автоматически загрузит клинику.

// app/User.php

class User extends Autheticatable
{

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

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

}
// app/Clinic.php

class Clinic extends Model
{
  public function users()
  {
    return $this->hasMany('App\User');
  }
}
// app/Animal.php

class Animal extends Model
{
  public function user()
  {
    return $this->belongsTo('App\User');
  }
}
class ClinicController extends Controller
{
  public function __construct()
  {
    $this->middleware('auth');
  }

  public function show(Clinic $clinic)
  {   
    return view('clinic.show', compact('clinic'));
  }
}
// view
@foreach($clinic->users as $farm)

  @foreach($farm->animals as $animal)

    {{ $animal->name }} - {{ $animal->weight }} etc...  

  @endforeach

@endforeach
1 голос
/ 31 октября 2019

По вашему мнению, у вас есть @foreach($farm as $farm)

Что вам нужно: @foreach($farms as $farm)

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

0 голосов
/ 31 октября 2019

Чтобы получить связанных животных для фермы $, я бы пошел

public function show($id)
{
    $farm = User::with(['animals'])->findOrFail($id);
    return view('clinic.show', compact('farm'));
}

Тогда в вашем клинке

@foreach($farm->animals as $animal)
 {{ $animal->id }}
@endforeach

Предполагается, что в вашей пользовательской модели установлены отношения с животными. конечно, что-то вроде

public function animals()
{
    return $this->hasMany('App\Animals')
}

(все не проверено)

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