L'accès Éloquent relation attributs
J'ai trois modèles sont tous liés par un-à-plusieurs. Catégorie, sous-catégorie et le Style. J'ai des relations de travail dans les deux sens - même si je semble avoir un problème d'accès aux attributs liés.
Après mes requêtes ont couru, je suis parti avec cette une instance de Style où les "relations" est une instance de la sous-catégorie, et les "relations" dans la sous-catégorie est une instance de la Catégorie. Ce qui est tout à fait correct.
Le problème est que maintenant je me semblent pas être en mesure d'accéder à la relative instances de modèle. Par exemple, si je l'appelle:
$style->subcategory->name;
- Je obtenir "Essayer d'obtenir la propriété de non-objet". J'ai donc essayé d'appeler seulement $style->sous-catégorie et le résultat est '1'.
Pourquoi ne pas $style->retour de la sous-catégorie de l'instance de la sous-catégorie modèle? Ai-je raté quelque chose ou est ma compréhension incorrecte?
--EDIT--
Modèles
Catégorie
<?php
namespace Paragon\Products;
use Illuminate\Database\Eloquent\Model as Eloquent;
class Category extends Eloquent {
protected $table = 'product_categories';
protected $fillable = [
'name',
'slug',
'image'
];
public function subcategories() {
return $this->hasMany('Paragon\Products\Subcategory', 'category');
}
}
De la sous-catégorie
<?php
namespace Paragon\Products;
use Illuminate\Database\Eloquent\Model as Eloquent;
class Subcategory extends Eloquent {
protected $table = 'product_subcategories';
protected $fillable = [
'category',
'name',
'slug',
'image'
];
public function styles() {
return $this->hasMany('Paragon\Products\Style', 'subcategory');
}
public function category() {
return $this->belongsTo('Paragon\Products\Category', 'category');
}
}
Style
<?php
namespace Paragon\Products;
use Illuminate\Database\Eloquent\Model as Eloquent;
class Style extends Eloquent {
protected $table = 'product_styles';
protected $fillable = [
'subcategory',
'name',
'slug',
'image'
];
public function subcategory() {
return $this->belongsTo('Paragon\Products\Subcategory', 'subcategory');
}
}
Requête
$style->where($id, $item)->with('subcategory.category')->first();
Tables
Paragon\Products\Catégorie
ID ...
1
2
Paragon\Products\Sous-Catégorie
ID Category ...
1 2
2 2
Paragon\Products\Style
ID Subcategory ...
1 1
2 1
Depuis la sous-catégorie de la méthode dans le modèle de Style doivent se référer à une seule instance de la sous-catégorie et non pas une Collection d'entre eux, ne devrais-je pas être en mesure de simplement appeler les attributs de la façon dont je suis (ou essaie)?
subcategory
colonne sur votre styles
table? Il pourrait être de retour la valeur de la colonne plutôt que la mise en relation du modèle.Êtes-vous sûr que vous avez mis en place belongsTo relation en plus de la hasMany?
Vous avez besoin de nous montrer vos modèles afin que nous puissions vous aider.
Je ne! Que peut être le problème..
Je l'ai mis en place, voir ci-dessus
OriginalL'auteur Mike Kaperys | 2015-08-27
Vous devez vous connecter pour publier un commentaire.
Ok je crois que je vois maintenant ce qui se passe. Votre Éloquent modèle est appelé sous-catégorie, mais c'est la clé étrangère. Ainsi, lorsque vous appelez
Qui est de retourner la clé étrangère à la place du modèle. Pour corriger cette erreur, je vous recommande de changer le nom de la clé étrangère de l'id de subcategory_id. Si vous ne pouvez pas modifier la base de données, vous pouvez forcer l'utilisation du modèle par la méthode de chaînage avec quelque chose comme ça
Edit:
Une autre idée, vous pouvez modifier le nom de la relation à quelque chose comme
Alors vous devriez être en mesure de bien le référencer avec
OriginalL'auteur Adrian Flannery
Je prends un coup de feu dans l'obscurité ici. Mais je vais tenter de vous expliquer comment travailler avec la collecte et de la différence entre la première et la obtenir.
d'autre part, si l'image n'appartiennent à un utilisateur, et l'utilisateur a une image. Vous pouvez accéder à image_name comme ce
dans votre cas
pour obtenir un style par id avec subcategoty
OriginalL'auteur mdamia