mercredi 24 août 2016

Laravel : send pivot tables data in view

I'm new to Laravel 5 and I have some difficulties with pivot tables, controllers and repositories.

I have the tables 'users', 'sites', 'site_user', and here is what I have now :


App\Models\User

class User extends Model implements AuthenticatableContract, CanResetPasswordContract {

    protected $table = 'users';

    public function sites() 
    {
      return $this->belongsToMany('App\Models\Site')
        ->withPivot('site_id', 'user_id', 'relation');
    }
}


App\Models\Site

class Site extends Model {

    protected $table = 'sites';

    public function user() 
    {
        return $this->belongsToMany('App\Models\User')
        ->withPivot('site_id', 'user_id', 'relation');
    }
}


App\Repositories\SiteRepository

<?php namespace App\Repositories;

use App\Models\Site, App\Models\User;

class SiteRepository extends BaseRepository
{
/**
 * The User instance.
 *
 * @var App\Models\User
 */ 
protected $user;

/**
 * Create a new SiteRepository instance.
 *
 * @param  App\Models\Site $site
 * @return void
 */
public function __construct (Site $sites, User $user)
{
    $this->model = $sites;
    $this->user = $user;
}

/**
 * Get sites collection paginate.
 *
 * @param  int  $n
 * @return Illuminate\Support\Collection
 */
public function index($n)
{
    return $this->model
    ->latest()
    ->paginate($n);
}


App\Http\Controllers\SiteController

<?php namespace App\Http\Controllers;

use App\Repositories\SiteRepository;
use App\Repositories\UserRepository;
use App\Http\Requests\SiteCreateRequest;
use App\Http\Requests\SiteUpdateRequest;
use App\Models\Site;
use App\Models\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class SiteController extends Controller {

/**
 * The SiteRepository instance.
 *
 * @var App\Repositories\SiteRepository
 */
protected $site_gestion;

/**
 * The UserRepository instance.
 *
 * @var App\Repositories\UserRepository
 */
protected $user_gestion;

/**
 * Create a new SiteController instance.
 *
 * @param  App\Repositories\SiteRepository $site_gestion
 * @param  App\Repositories\UserRepository $user_gestion
 * @return void
 */
public function __construct (SiteRepository $site_gestion, UserRepository $user_gestion)
{
    $this->site_gestion = $site_gestion;
    $this->user_gestion = $user_gestion;

    $this->middleware('admin');
}

/**
 * Display a listing of the resource.
 *
 * @return Response
 */
public function index(SiteRepository $site_gestion)
{
    //$counts = $this->site_gestion->counts();
    $sites = $site_gestion->index(25);
    $links = $sites->render();
    return view('back.sites.index', compact('sites'));
}


views\back\sites\table.blade.php

@foreach ($sites as $site)
    [...some code...]
@endforeach


What I want to do is to get all the sites of the logged in user. I've tried many things, but none of them are working. And I'm still not sure where to put the code, repository or controller...

I've read tutorials about pivot in Laravel, and I've tried with some things like this in the repo, but it doesn't work...

$user = $this->user->find(auth()->user()->id); //This line is working

foreach ($user->sites as $site) {
    return $site
    ->latest()
    ->paginate($n);
}



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire