Laravel 5.4 中的关系无法正常工作
The relations not working properly in 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));
}
我看不到任何关系,我只能看到工作流中的数据 table。
有人可以帮助我吗
谢谢
这是因为关系中的数据在默认情况下不会立即加载。只有当您请求或调用关系时才会检索它。
因此,在您的代码中,如果您尝试在 find 方法之后访问关系数据,它将从 db 加载数据并将其提供给您,这称为延迟加载。像这样:
public function editworkflow($id)
{
$wf_model = new workflows;
dd($wf_model::find($id)->workFlowStates);
}
但是,如果您想预先加载数据,可以使用 Eloquent 的 with
函数。但对于单个记录来说没有必要,因为它不会产生任何影响。
试试这个:
public function editworkflow($id)
{
echo workflows::with('workFlowStates')->find($id);
}
编辑记录时不要创建对象。像 $wf_model = 新的工作流程;您可以通过调用模型进行查询。
我有一个类似这两个的模型
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));
}
我看不到任何关系,我只能看到工作流中的数据 table。
有人可以帮助我吗
谢谢
这是因为关系中的数据在默认情况下不会立即加载。只有当您请求或调用关系时才会检索它。
因此,在您的代码中,如果您尝试在 find 方法之后访问关系数据,它将从 db 加载数据并将其提供给您,这称为延迟加载。像这样:
public function editworkflow($id)
{
$wf_model = new workflows;
dd($wf_model::find($id)->workFlowStates);
}
但是,如果您想预先加载数据,可以使用 Eloquent 的 with
函数。但对于单个记录来说没有必要,因为它不会产生任何影响。
试试这个:
public function editworkflow($id)
{
echo workflows::with('workFlowStates')->find($id);
}
编辑记录时不要创建对象。像 $wf_model = 新的工作流程;您可以通过调用模型进行查询。