2017-02-08 5 views
1

У меня есть модель что-то вроде этих двухотношения не работает должным образом в Laravel 5,4

workflows.php

<?php 

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 
use DB; 

class workflows extends Model 
{ 
    //getWorkflows 
    protected $table = 'workflows'; 

    function workFlowStates() 
    { 
     return $this->hasMany('App\Models\workflow_states','id','workflow_id'); 
    } 
} 

workflow_states.php

<?php 

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 
use DB; 
class workflow_states extends Model 
{ 
    // 
    protected $table = 'workflow_states'; 

    function workFlows() 
    { 
     return $this->belongsTo('App\Models\workflows','workflow_id','id'); 
    } 

} 

Когда я пытаюсь для этого в моем контроллере

public function editworkflow($id) 
    { 
     $wf_model = new workflows; 
     dd($wf_model::find($id)); 

    } 

Я не могу видеть ни одного из отношений, я могу видеть только данные из таблицы рабочих процессов.

Может кто-нибудь помочь мне здесь

благодаря

ответ

1

Попробуйте это:

public function editworkflow($id) 
{ 
    echo workflows::with('workFlowStates')->find($id); 
} 

Вы не сделать объект при редактировании записи. Как $ wf_model = новые рабочие процессы; Вы можете сделать запрос, просто вызвав модель.

0

Это происходит потому, что данные отношения не хотят загружаться по умолчанию. Он извлекается только тогда, когда вы запрашиваете его или называете его отношением.

Итак, в вашем коде, если вы попытаетесь получить доступ к данным отношения после метода find, он будет загружать данные из db и передавать их вам, что называется ленивой загрузкой. Как это:

public function editworkflow($id) 
{ 
    $wf_model = new workflows; 
    dd($wf_model::find($id)->workFlowStates); 

} 

Однако, если вы хотите нетерпеливые нагрузки данных, которые вы можете использовать функцию with красноречив в. Но это не обязательно для одной записи, так как это не будет иметь никакого значения.

Прочитано Eloquent eager loading.

Смежные вопросы