Cześć, jestem nowy w laravel. Próbuję zbudować relację między dwiema tabelami.
Metoda w moim kontrolerze
public function show()
{
$users = users::all();
dd($users->art);
die;
return View("test")->with("ime");
}
model użytkownika
namespace App;
use IlluminateDatabaseEloquentModel;
use AppArticles;
class users extends Model
{
protected $fillable =["name","email","password"];
public function setNameAttribute($data)
{
$this->attributes["name"] = strtolower($data)."Duca";
}
public function scopeNametor($query)
{
$query->where("name","ero");
}
public function art()
{
return $this->hasMany("AppArticles");
}
}
artykuł Model
namespace App;
use IlluminateDatabaseEloquentModel;
class Articles extends Model
{
public function users()
{
return $this->belongsTo("Appusers");
}
}
Ustawiam klucz obcy
user.id to articles.user_id
dodam także indeks do pola articles.user_id.
Ale dostaję błąd
Undefined property: IlluminateDatabaseEloquentCollection::$art
Jakoś laravel nie rozpoznaje sztuki jako metody, ale traktuje ją jako własność. Coś, co robię źle. Próbuję czegoś takiego, ale nie mam szczęścia
dd($users->art()-get()->toArray());
Gdzie może być problem. Myślę, że można to łatwo rozwiązać
Odpowiedzi:
0 dla odpowiedzi № 1Jest to oczekiwane zachowanie zgodnie z dokumentami Laravel:
Po zdefiniowaniu relacji możemy ją odzyskaćpowiązany rekord przy użyciu właściwości dynamicznych Eloquent. Właściwości dynamiczne umożliwiają dostęp do funkcji relacji tak, jakby były właściwościami zdefiniowanymi w modelu
Podany przykład:
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
/**
* Get the phone record associated with the user.
*/
public function phone()
{
return $this->hasOne("AppPhone");
}
}
Aby uzyskać dostęp do relacji telefonicznej:
$phone = User::find(1)->phone;
0 dla odpowiedzi nr 2
Tak, znalazłem błąd, którego nie możesz użyć $ users = users :: all (); powróci do całej kolekcji spróbuj czegoś takiego $users = users::first();