如何在 Yajra 数据表中使用 Eloquent 关系?
How to use Eloquent relationships with Yajra Datatables?
我正在尝试使用 eloquent 关系来显示患者姓名而不是患者 ID 外键。相反,它只显示患者 ID,就好像它没有看到关系一样。
我的控制器功能是:
public function getActions(){
$data = Action::all();
return DataTables::of($data)
->addColumn('name',function(Action $action){
return empty ($action->patient->first_name) ? $action->patient_id : $action->patient->first_name;
//return DB::raw("SELECT * FROM 'patients' WHERE 'patients_id' = ?", $action->patient_id);
})
->make(true);
}
我在视图中的js函数是:
<script type="text/javascript">
$(document).ready(function (){
$('#actionTable').DataTable({
processing: true,
serverSide: true,
ajax:'{!! route('get.actions')!!}',
columns:[
{data:'action_id', name:'action_id'},
{data:'name', name:'name'},
{data:'action_status_id', name:'action_status_id'},
{data:'is_complete', name:'is_complete'},
]
});
})
</script>
我的操作 class 是:
class Action extends Model
{
protected $table ="actions";
protected $fillable=[
'user_id', 'patient_id', 'option_id', 'action_status_id', 'is_complete', 'due_date',
];
protected $primary_key = "action_id";
public $incrementing = false;
public function patients(){
return $this->belongsTo('App\Patient','patient_id','action_id');
}
}
我的患者 class 是:
class Patient extends Model
{
protected $table ="patients";
protected $fillable=[
'first_name', 'last_name', 'email', 'phone', 'dob', 'gender_id', 'is_active',
];
protected $primary_key = 'patient_id';
public $incrementing = false;
public function actions(){
return $this->hasMany('App\Action','action_id','patient_id');
}
}
问题是您将 Action 模型中的关系函数命名为 "patients"。你打电话给
$action->patient->first_name
。
我建议将 Action Model 中的关系函数重命名为
public function patient()
这更有意义。
请参阅文档以获得更多说明One to One Relationships
我正在尝试使用 eloquent 关系来显示患者姓名而不是患者 ID 外键。相反,它只显示患者 ID,就好像它没有看到关系一样。
我的控制器功能是:
public function getActions(){
$data = Action::all();
return DataTables::of($data)
->addColumn('name',function(Action $action){
return empty ($action->patient->first_name) ? $action->patient_id : $action->patient->first_name;
//return DB::raw("SELECT * FROM 'patients' WHERE 'patients_id' = ?", $action->patient_id);
})
->make(true);
}
我在视图中的js函数是:
<script type="text/javascript">
$(document).ready(function (){
$('#actionTable').DataTable({
processing: true,
serverSide: true,
ajax:'{!! route('get.actions')!!}',
columns:[
{data:'action_id', name:'action_id'},
{data:'name', name:'name'},
{data:'action_status_id', name:'action_status_id'},
{data:'is_complete', name:'is_complete'},
]
});
})
</script>
我的操作 class 是:
class Action extends Model
{
protected $table ="actions";
protected $fillable=[
'user_id', 'patient_id', 'option_id', 'action_status_id', 'is_complete', 'due_date',
];
protected $primary_key = "action_id";
public $incrementing = false;
public function patients(){
return $this->belongsTo('App\Patient','patient_id','action_id');
}
}
我的患者 class 是:
class Patient extends Model
{
protected $table ="patients";
protected $fillable=[
'first_name', 'last_name', 'email', 'phone', 'dob', 'gender_id', 'is_active',
];
protected $primary_key = 'patient_id';
public $incrementing = false;
public function actions(){
return $this->hasMany('App\Action','action_id','patient_id');
}
}
问题是您将 Action 模型中的关系函数命名为 "patients"。你打电话给
$action->patient->first_name
。
我建议将 Action Model 中的关系函数重命名为
public function patient()
这更有意义。
请参阅文档以获得更多说明One to One Relationships