在Eloquent中,HasMany關係中的'with'方法傳回一個空集合。
P粉143640496
P粉143640496 2023-07-19 22:17:01
0
1
575

我遇到了這個問題:我已經定義了兩個模型之間的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']'來預設取得我想要的結果。

你有什麼想法?還需要其他資訊嗎?

P粉143640496
P粉143640496

全部回覆(1)
P粉087951442

由於我的'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');
    }

}

這樣就行了

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板