/ / Laravel Tema de relaciones elocuentes - php, laravel

Laravel Tema de relaciones elocuentes - php, laravel

Hola soy nuevo en laravel. Estoy tratando de construir una relación entre dos tablas.

Método en mi controlador

public function show()
{
$users = users::all();
dd($users->art);
die;
return View("test")->with("ime");
}

modelo de usuario

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

modelo de artículo

namespace App;

use IlluminateDatabaseEloquentModel;

class Articles extends Model
{
public function users()
{
return $this->belongsTo("Appusers");
}
}

Puse clave externa

user.id to articles.user_id

También agrego índice al campo articles.user_id.

Pero me da error

Undefined property: IlluminateDatabaseEloquentCollection::$art

De alguna manera, laravel no reconoce el arte como método, sino que lo trata como una propiedad. Algo que estoy haciendo mal. Intento algo así, pero no tengo suerte.

dd($users->art()-get()->toArray());

Donde podría haber problema. Creo que esto podría ser fácil de resolver.

Respuestas

0 para la respuesta № 1

Este es el comportamiento esperado como se indica en los documentos de Laravel:

Una vez que se define la relación, podemos recuperarel registro relacionado que utiliza las propiedades dinámicas de Eloquent. Las propiedades dinámicas le permiten acceder a las funciones de relación como si fueran propiedades definidas en el modelo

Laravel - Elocuente: Relaciones

El ejemplo dado:

<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class User extends Model
{
/**
* Get the phone record associated with the user.
*/
public function phone()
{
return $this->hasOne("AppPhone");
}
}

Para acceder a la relación telefónica:

$phone = User::find(1)->phone;

0 para la respuesta № 2

Sí, encontré el error que no puedes usar $ users = users :: all (); va a volver toda la colección probar algo como esto $users = users::first();