Maison > Questions et réponses > le corps du texte
J'ai rencontré ce problème : j'ai défini une relation HasMany entre deux modèles comme ceci :
DepartamentoPersonalizado.php:
<?php namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentRelationsHasMany; use AppModelsLocalidadPersonalizada; class DepartamentoPersonalizado extends Model { use HasFactory; protected $table = 'departamentos_personalizados'; //I've tried: //protected $with = ['localidades']; public function localidades ():HasMany { return $this->hasMany(LocalidadPersonalizada::class,'departamento_id'); } }
LocalidadPersonalizada.php :
<?php namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateDatabaseEloquentModel; use AppModelsDepartamentoPersonalizado; class LocalidadPersonalizada extends Model { use HasFactory; protected $table = 'localidades_personalizadas'; public function departamento () { return $this->belongsTo(DepartamentoPersonalizado::class,'id'); } }
Quand je fais ce qui suit dans Tinker :
> use AppModelsDepartamentoPersonalizado; > $departamentos= DepartamentoPersonalizado::all()->first()->localidades;
Je reçois :
= IlluminateDatabaseEloquentCollection {#6778 all: [ AppModelsLocalidadPersonalizada {#6780 nombre_localidad: "General San Martin", departamento_id: "06371", id: 1, }, AppModelsLocalidadPersonalizada {#6781 nombre_localidad: "Villa Lynch", departamento_id: "06371", id: 2, }, AppModelsLocalidadPersonalizada {#6782 nombre_localidad: "Villa Maipu", departamento_id: "06371", id: 3, }, AppModelsLocalidadPersonalizada {#6783 nombre_localidad: "Villa Ballester", departamento_id: "06371", id: 4, }, ...
Mais :
> $departamentos = DepartamentoPersonalizado::with('localidades')->get();
J'ai eu
= IlluminateDatabaseEloquentCollection {#6770 all: [ AppModelsDepartamentoPersonalizado {#6771 departamento_datos_gob: "Ciudad Libertador San Martin", departamento_osm: "General San Martin", id_provincia: "06", id: "06371", reemplazar_agregar: 0, localidades: IlluminateDatabaseEloquentCollection {#6765 all: [], }, }, AppModelsDepartamentoPersonalizado {#6767 departamento_datos_gob: "La Matanza", departamento_osm: "La Matanza", id_provincia: "06", id: "06427", reemplazar_agregar: 1, localidades: IlluminateDatabaseEloquentCollection {#6790 all: [], }, }, ], }
Je veux dire, la propriété 'localidades' renvoie une collection vide, alors que je veux qu'elle contienne une collection imbriquée.
Je souhaite utiliser 'protected $with = ['localidades']' dans DepartamentoPersonalizado pour obtenir les résultats que je souhaite par défaut.
Qu'en pensez-vous ? Besoin d'informations complémentaires ?
P粉0879514422023-07-20 15:59:14
Étant donné que l'"id" dans ma table "departamentos_personalizados" est une chaîne et non un entier, je dois procéder comme suit :
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; use App\Models\LocalidadPersonalizada; class DepartamentoPersonalizado extends Model { use HasFactory; protected $table = 'departamentos_personalizados'; public $incrementing=false; protected $with = ['localidades']; protected $casts=['reemplazar_agregar' => 'boolean']; public function localidades ():HasMany { return $this->hasMany(LocalidadPersonalizada::class,'departamento_id','id'); } }
C'est ça