Charlie Web Nancy Charlie Web Nancy - 3 months ago 22
PHP Question

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);
}

Answer

If you want all sites of a logged user simply do it like this:

$sites = Auth::user()->sites;

That's all you need to do to get to these sites. If you want to use query and pagination try like this:

$sites = Auth::user()->sites()->latest()->paginate($n);
Comments