Получить объекты связанных таблиц из коллекции laravel - PullRequest
0 голосов
/ 28 октября 2019

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

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

@extends('layouts.app')

@section('content')
    @foreach ($result as $object)
        <div class="container">
            <div class="row justify-content-center">
                <div class="col-md-8">
                    <div class="card">
                        <div class="card-header">
                            <h3>Details for the animal</h3>

                        </div>
                        <div class="card-body">
                            <div class="col-12">
                                <p><strong>Id: </strong>{{ $object->id }}</p>


                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

    @endforeach
@endsection

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

<?php

namespace App\Http\Controllers;

use App\Animal;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class SearchController extends Controller
{
    public function index()
    {
        Animal::all();
        return view('search.index');
    }
    public function postSearch(Request $request)
    {
        $serial_number = $request->input('search');
        $this->getResult($serial_number);
        return redirect()->route('result',$serial_number);
    }
    public function getResult($serial_number){
        $result = DB::table('slaughters')->where(function ($query) use ($serial_number) {
            $query->where('id','LIKE',"%$serial_number%");
        })->latest()->get();

        return view('search.result', ['result'=>$result]);


    }
}

И мои маршруты

Route::get('/search','SearchController@index')->name('search');
Route::post('/get','SearchController@postSearch');
Route::get('/search/{result}','SearchController@getResult')->name('result');

Я хотел бы получить доступ к данным из таблицы, связанной с этой тоже. Что делать

Убой модели

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

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

    public function animal(){
        return $this->belongsTo(Animal::class);
    }

Ответы [ 2 ]

2 голосов
/ 28 октября 2019

Вы должны создать модель Slaughter и определить отношения.

И тогда вы можете получить результат:

public function getResult($serial_number)
{
    $result = Slaughter::with(['name_of_relation_1', 'name_of_relation_2'])->latest()->get();

    return view('search.result', ['result'=>$result]);
}
0 голосов
/ 28 октября 2019

В вашем контроллере:

use App\Slaughter;

public function getResult($serial_number) {
    $result = Slaughter::where('id', 'like', "%{$serial_number}%")
        ->with('user', 'animal')
        ->latest()
        ->get();

    return view('search.result', compact('result'));
}

По вашему мнению, вы можете получить доступ к следующим отношениям:

{{ $object->user }}

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