отношение ownTo – hasOne возвращает ноль - PullRequest
1 голос
/ 30 января 2020

Я пытаюсь создать отношение в Laravel, и когда я использую отношение hasOne, оно возвращает ноль.

Формат таблицы такой:

┌─────────┐   ┌─────────────────┐   ┌───────────────┐
│ socio   │ ← │ socioGf         │ → │ grupoFamiliar │
├─────────┤   ├─────────────────┤   ├───────────────┤
│ id      │   │ idSocio         │   │ id            │
│         │   │ idGrupoFamiliar │   │               │
└─────────┘   └─────────────────┘   └───────────────┘

Вот мой код:

Модель SocioGf:

...
public function grupoFamiliar(){
     return $this->hasOne('App\GrupoFamiliar','id','idGrupoFamiliar')
     ->toSql();
}
public function socio(){
     return $this->hasOne('App\Socio','id','idSocio');
}
...

Модель socio:

...
public function socioGf(){
        return $this->belongsTo('App\SocioGf', 'idSocio', 'id');
}  
...

Модель grupoFamiliar:

...
public function socioGf(){
        return $this->belongsTo('App\SocioGf', 'idGrupoFamiliar','id');
} 
...

В моем grupoFamiliarController я возвращаю:

$gruposFamiliares = GrupoFamiliar::paginate($this->paginateNumber);        
return view('gruposFamiliares',compact('gruposFamiliares'));

Так что в gruposFamiliares.blade.php я пытаюсь получить доступ таким образом:

@forelse($gruposFamiliares as $grupoFamiliar)
    {{dd($grupoFamiliar->socioGf)}}
    @foreach($grupoFamiliar->socioGf() as $gf)
        {{dd($gf->socio)}}
    @endforeach
@endforelse

Во второй строке dd показывает нулевая переменная, есть идеи почему?

1 Ответ

3 голосов
/ 30 января 2020

Что вам нужно, так это отношение принадлежит ToMany

в модели socio:

...
public function gruposFamiliares(){
    return $this->belongsToMany(GrupoFamiliar::class, 'socioGf_table', 'socioId', 'grupoFamiliarId');
}
...

в модели grupoFamiliar:

...
public function socios(){
    return $this->belongsToMany(Socio::class, 'socioGf_table', 'grupoFamiliarId', 'socioId');
}
...

Затем вы можете получить доступ к socios и gruposFamiliares следующим образом:

$socio->gruposFamiliares()->get();
$grupoFamiliar->socios()->get();

Каждая из этих строк будет возвращать коллекцию So cios и GruposFamiliares.

...