我遇到了这个问题:我已经定义了两个模型之间的HasMany关系,就像这样:
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');
}
}
当我在Tinker中执行以下操作时:
> use AppModelsDepartamentoPersonalizado; > $departamentos= DepartamentoPersonalizado::all()->first()->localidades;
I get:
= 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,
},
...
但是:
> $departamentos = DepartamentoPersonalizado::with('localidades')->get();
我得到
= 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: [],
},
},
],
}
我的意思是,属性'localidades'返回一个空集合,而我希望它包含一个嵌套的集合。
我想在DepartamentoPersonalizado中使用'protected $with = ['localidades']'来默认获取我想要的结果。
你有什么想法?还需要其他信息吗?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
由于我的'departamentos_personalizados'表中的'id'是字符串而不是整数,所以我需要执行以下操作:
<?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'); } }这样就行了