J'ai 3 tables dans DB (utilisateurs, zones, area_user),propriété [nom] n'existe pas sur cette instance de collection
Table des utilisateurs: id nom nom d'utilisateur mot de passe
table zones: id nom
table area_user: id user_id area_id
J'essaie de créer une page (Liste des utilisateurs) qui affichera toutes les colonnes de la table utilisateur avec les zones affectées par l'utilisateur.
User.php fichier Modèle
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name', 'email', 'password','role_id',];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = ['password', 'remember_token',];
public function areas(){
return $this->belongsToMany('App\Area','area_user');
}
Area.php fichier Modèle:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Area extends Model{
protected $fillable = ['name'];
public function users(){
return $this->belongsToMany('App\User','area_user','area_id','user_id');
}
}
UserController fichier d'index @:
<?php
namespace App\Http\Controllers;
use App\Areas;
use App\Roles;
use App\User;
use Illuminate\Http\Request;
class UserController extends Controller{
public function __construct(){
// $this->middleware('auth');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(){
$users = User::get();
return view('users._list',
['users'=> $users]
);
}
Enfin, le fichier de vue de la table: -
@foreach($users as $u)
<tr role="row" class="odd">
<td class="sorting_1">{{$u->name}}</td>
<td></td>
<td>{{$u->areas]}}</td>
<td>{{route('show_user', ['id' => $u->id])}}</td>
</tr></tbody>
@endforeach
Si je tapais en vue de la table utilisateur (zones affectées) avec seulement en utilisant la propriété zones ($ U-> zones), il montrera toute la colonne des zones: -
[
{
"id": 3,
"name": "C",
"location_id": 1,
"created_at": null,
"updated_at": null,
"pivot": {
"user_id": 4,
"area_id": 3
}
},
{
"id": 4,
"name": "D",
"location_id": 2,
"created_at": null,
"updated_at": null,
"pivot": {
"user_id": 4,
"area_id": 4
}
}
]
@foreach($users as $u)
<tr role="row" class="odd">
<td class="sorting_1">{{$u->name}}</td>
<td></td>
<td>{{$u->areas->name]}}</td>
<td>{{route('show_user', ['id' => $u->id])}}</td>
</tr></tbody>
@endforeach
Notez que si je spécifie le nom de la colonne dans la relation Areas dans la vue ci-dessus ($ u-> areas-> name), erreur indiquant: -
La propriété [nom] n'existe pas sur cette instance de collection. (Voir: C: \ xampp \ htdocs
Comment puis-je montrer que la (areas.name) colonne vue fichier
Merci, qui a résolu le problème, les zones maintenant est montrant comme supposé. – user2873860