/ / Laravel Eloquent relations issue - php, laravel

Laravel Eloquent relations issue - php, laravel

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 № 1

Jest 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

Laravel - Eloquent: Relacje

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