2 votes

Laravel - table de collection

Il y a deux tableaux, un tableau avec les rues et un tableau avec des informations sur la maison. J'ai essayé de joindre les tables en utilisant la colonne street_id de la table des maisons. La table fonctionne, j'obtiens les informations. Mais maintenant, comment faire pour que lorsque je clique sur le lien rue / {ID}, j'obtienne une liste des maisons qui s'y trouvent. Si je comprends bien, il faut ajouter le code suivant

public function getHouse() 
{
$houses = Houses::where('street_id', $this->street_id)->get();
dd ($houses);
}

DD le fait attendre. Où est-ce que je me suis trompé ?

3voto

Yudiz Solutions Points 2815

Vous pouvez procéder comme suit.

Modèle de rue:-

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Street extends Model
{
    public function houses()
    {
        return $this->hasMany('App\Models\House');
    }
}

Modèle de maison:-

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class House extends Model
{
    public function street()
    {
        return $this->BelongsTo('App\Models\Street','street_id');
    }
}

HouseController:-

<?php

namespace App\Http\Controllers;

use App\Models\Street;
use App\Models\House;

class HouseController extends Controller
{
    public function getHouse($street_id) 
    {
       //include model

        dump($street_id); // first you can get street_id

        // You can use with()
        $houses = House::with('street')->where('street_id',$street_id)->get();

        or 

         // also you can use whereHas()
        $houses = House::whereHas('street', function($q) use($street_id){
            $q->where('id',$street_id);
        })->get();

        or

        $houses = Street::with('houses')->where('id',$street_id)->get();

    }
}

J'espère que cela vous aidera.

0voto

Lyndon Points 130

Vous pouvez le faire avec la fonction Des relations éloquentes . Vous devez déclarer la relation dans le fichier Street Model comme suit...

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Street extends Model
{
    /**
     * Get the houses on the street.
     */
    public function houses()
    {
        return $this->hasMany(House::class);
    }
}

Maintenant, dans votre contrôleur où vous retournez la vue des maisons dans une rue, vous pouvez faire ceci ;

$houses = Street::find(1)->houses();

<?php

namespace App\Http\Controllers;

use App\Models\Street;
use Illuminate\Http\Request;

class StreetsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $street = Street::all();
        return view('street.all', compact('street'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param \App\Models\Appartaments $appartaments
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $street = Street::find(1)->houses();
//        $house = $street->houses;
        dd($street);
        return view('street.view', compact('street'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param \App\Models\Appartaments $appartaments
     * @return \Illuminate\Http\Response
     */
    public function edit(Appartaments $appartaments)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param \Illuminate\Http\Request $request
     * @param \App\Models\Appartaments $appartaments
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Appartaments $appartaments)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param \App\Models\Appartaments $appartaments
     * @return \Illuminate\Http\Response
     */
    public function destroy(Appartaments $appartaments)
    {
        //
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X