Laravel 如何联接两个表并在datatables中显示
这是我的会员的Laravel 如何联接两个表并在datatables中显示,laravel,datatables,Laravel,Datatables,这是我的会员的灯表 |gy_id| gy_sx_ID | gylight_number| gylight_sDate | gylight_eDate | -----------------------------------------------------------------| | 1 | SX00002 | A1-1 | 2020-11-13 | 2020-11-13 | | 2 | SX00002 | A1-17 | 20
灯
表
|gy_id| gy_sx_ID | gylight_number| gylight_sDate | gylight_eDate |
-----------------------------------------------------------------|
| 1 | SX00002 | A1-1 | 2020-11-13 | 2020-11-13 |
| 2 | SX00002 | A1-17 | 2020-11-11 | 2021-11-16 |
| 3 | SX00004 | A10-10 | 2020-11-11 | 2021-11-17 |
------------------------------------------------------------------
|id| light_gylight_number| gylight_status |
-------------------------------------------
| 1| A1-1 | 0 |
|10| A10-10 | 1 |
|17| A1-17 | 1 |
-------------------------------------------
0表示无灯,1表示灯亮
|id| sx_ID | sx_Ename | sx_phone | gylight |
---------------------------------------------------
|1 |SX00001| Jeremy | 012312318 | 0 |
|2 |SX00002| Alex | 123123123 | 1 |
|3 |SX00003| Kelvin | 312312354 | 0 |
|4 |SX00004| William | 012344657 | 1 |
---------------------------------------------------
这是我的观音
表
|gy_id| gy_sx_ID | gylight_number| gylight_sDate | gylight_eDate |
-----------------------------------------------------------------|
| 1 | SX00002 | A1-1 | 2020-11-13 | 2020-11-13 |
| 2 | SX00002 | A1-17 | 2020-11-11 | 2021-11-16 |
| 3 | SX00004 | A10-10 | 2020-11-11 | 2021-11-17 |
------------------------------------------------------------------
|id| light_gylight_number| gylight_status |
-------------------------------------------
| 1| A1-1 | 0 |
|10| A10-10 | 1 |
|17| A1-17 | 1 |
-------------------------------------------
这是我的gylight桌子
|gy_id| gy_sx_ID | gylight_number| gylight_sDate | gylight_eDate |
-----------------------------------------------------------------|
| 1 | SX00002 | A1-1 | 2020-11-13 | 2020-11-13 |
| 2 | SX00002 | A1-17 | 2020-11-11 | 2021-11-16 |
| 3 | SX00004 | A10-10 | 2020-11-11 | 2021-11-17 |
------------------------------------------------------------------
|id| light_gylight_number| gylight_status |
-------------------------------------------
| 1| A1-1 | 0 |
|10| A10-10 | 1 |
|17| A1-17 | 1 |
-------------------------------------------
这是我的gylight车型
class Gylight extends Model
{
public function gynumber()
{
return $this->belongsTo(Guanyin::class, 'gylight_number','light_gylight_number');
}
public function detail()
{
return $this->hasOneThrough(
'App\Models\Light',
'App\Models\Guanyin',
'gylight_number', // Foreign key on Guanyin table...
'sx_ID', // Foreign key on Light table...
'light_gylight_number', // Local key on gylight table...
'gy_sx_ID' // Local key on Guanyin table...
);
}
public function getStatusAttribute()
{
$status = "";
if($this->gylight_status){
$status .= "<i style='color: green;' class='far fa-lightbulb fa-lg Blink'></i>";
}
else{
$status .= null;
}
return $status;
}
public function scopeWhereOrder($query, $orderByField, $orderBy)
{
$field = explode('.', $orderByField);
if(count($field) != 1){
$query->with([$field[0] => function($query) use ($field, $orderBy){
$query->orderBy($field[1], $orderBy);
}]);
}else{
$query->orderBy($orderByField, $orderBy);
}
}
public function scopeApplyFilter($query, array $filters)
{
$filters = collect($filters);
if($filters->get('search')){
$search = $filters->get('search');
$query->where('id','LIKE','%'.$search.'%')
->orWhere('gylight_number','LIKE','%'.$search.'%');
}
$field = $filters->get('orderbyField') ? $filters->get('orderByField') : 'id';
$orderBy = $filters->get('orderBy') ? $filters->get('orderBy') : 'asc';
$query->whereOrder($field, $orderBy);
}
}
类Gylight扩展模型
{
公共功能编号()
{
返回$this->belongsTo(观音::类,'gylight\u number','light\u gylight\u number');
}
公共功能详细信息()
{
返回$this->hasOneThrough(
“应用程序\模型\灯光”,
'应用程序\模型\观音',
'gylight_number',//观音表上的外键。。。
'sx_ID',//灯光表上的外键。。。
'light_gylight_number',//gylight表上的本地键。。。
'gy_sx_ID'//观音表上的本地键。。。
);
}
公共函数getStatusAttribute()
{
$status=“”;
如果($this->gylight\u状态){
$status.=“”;
}
否则{
$status.=null;
}
返回$status;
}
公共函数scopeWhereOrder($query、$orderByField、$orderBy)
{
$field=分解('.',$orderByField);
如果(计数($field)!=1){
$query->with([$field[0]=>函数($query)use($field,$orderBy){
$query->orderBy($field[1],$orderBy);
}]);
}否则{
$query->orderBy($orderByField,$orderBy);
}
}
公共函数scopeApplyFilter($query,array$filters)
{
$filters=收集($filters);
如果($filters->get('search')){
$search=$filters->get('search');
$query->where('id'、'LIKE'、'%'。$search'%'))
->或where('gylight_number','LIKE','%.$search.'%');
}
$field=$filters->get('orderbyField')?$filters->get('orderbyField'):'id';
$orderBy=$filters->get('orderBy')?$filters->get('orderBy'):'asc';
$query->whereOrder($field,$orderBy);
}
}
这是我的gylight列表控制器
public function index(Request $request)
{
if($request->header('X-Requested-With') == 'XMLHttpRequest'){
$column = array(
'gylight_number',
'gylight_status',
);
$filter = array();
if($request->order) {
$filter['orderByField'] = $column[$request->order[0]['column']];
$filter['orderBy'] = $request->order[0]['dir'];
}
if($request->status ){
$filter['status'] = $request->status;
}
if($request->search) {
$filter['search'] = $request->search['value'];
}
$filter_row = Gylight::select('*')
->applyFilter($filter)
->count();
$gylight = Gylight::with('detail')
->select('*')
->offset($request->get('start'))
->limit($request->get('length'))
->applyFilter($filter)
->get();
$data = [];
foreach($gylight as $gylight){
$sub_array = array();
$sub_array[] = $gylight->id;
$sub_array[] = $gylight->light_gylight_number;
$sub_array[] = $gylight->status;
$sub_array[] = $gylight->detail->sx_Ename;
$sub_array[] = $gylight->gylight_receipt;
$sub_array[] = $gylight->gylight_sDate;
$sub_array[] = $gylight->gylight_eDate;
$sub_array[] = '<button type="button" class="btn btn-primary radius choose_member" id="'.$gylight->id.'">'.
'Choose'.
'</button>';
$data[] = $sub_array;
}
return response()->json([
'draw' => $request->draw,
'recordsTotal' => Gylight::count(),
'recordsFiltered' => $filter_row,
'data' => $data,
'request' => $filter,
]);
}
return view('admin.guanyin.index');
}
public function gynumber()
{
return $this->belongsTo(Guanyin::class, 'light_gylight_number','gylight_number');
}
public function gynumber()
{
return $this->belongsTo(Guanyin::class, 'sx_ID','gy_sx_ID');
}
公共功能索引(请求$Request)
{
if($request->header('X-request-With')=='XMLHttpRequest'){
$column=数组(
“gylight_编号”,
“gylight_状态”,
);
$filter=array();
如果($request->order){
$filter['orderByField']=$column[$request->order[0]['column']];
$filter['orderBy']=$request->order[0]['dir'];
}
如果($request->status){
$filter['status']=$request->status;
}
如果($request->search){
$filter['search']=$request->search['value'];
}
$filter_row=Gylight::select('*'))
->applyFilter($filter)
->计数();
$gylight=gylight::with('detail')
->选择(“*”)
->偏移量($request->get('start'))
->限制($request->get('length'))
->applyFilter($filter)
->get();
$data=[];
foreach($gylight作为$gylight){
$sub_array=array();
$sub_array[]=$gylight->id;
$sub_数组[]=$gylight->light_gylight_编号;
$sub_array[]=$gylight->status;
$sub_array[]=$gylight->detail->sx_Ename;
$sub_数组[]=$gylight->gylight_收据;
$sub_array[]=$gylight->gylight_sDate;
$sub_array[]=$gylight->gylight_eDate;
$sub_数组[]=''。
“选择”。
'';
$data[]=$sub_数组;
}
返回响应()->json([
'draw'=>$request->draw,
'recordsTotal'=>Gylight::count(),
“recordsFiltered'=>$filter\u行,
“数据”=>$data,
“请求”=>$filter,
]);
}
返回视图('admin.guanyin.index');
}
现在我得到了这样的桌子
public function light()
{
return $this->hasMany(Light::class, 'sx_ID','gy_sx_ID');
}
public function gylight()
{
return $this->hasMany(Gylight::class, 'light_gylight_number','gylight_number');
}
我想将sx_Ename和sx_phone从我的light表显示到sx Detail列,如何加入表以获得值?
当我添加此消息时
但它以XHR形式获取值
构建3个这样的模型: Gylight
public function index(Request $request)
{
if($request->header('X-Requested-With') == 'XMLHttpRequest'){
$column = array(
'gylight_number',
'gylight_status',
);
$filter = array();
if($request->order) {
$filter['orderByField'] = $column[$request->order[0]['column']];
$filter['orderBy'] = $request->order[0]['dir'];
}
if($request->status ){
$filter['status'] = $request->status;
}
if($request->search) {
$filter['search'] = $request->search['value'];
}
$filter_row = Gylight::select('*')
->applyFilter($filter)
->count();
$gylight = Gylight::with('detail')
->select('*')
->offset($request->get('start'))
->limit($request->get('length'))
->applyFilter($filter)
->get();
$data = [];
foreach($gylight as $gylight){
$sub_array = array();
$sub_array[] = $gylight->id;
$sub_array[] = $gylight->light_gylight_number;
$sub_array[] = $gylight->status;
$sub_array[] = $gylight->detail->sx_Ename;
$sub_array[] = $gylight->gylight_receipt;
$sub_array[] = $gylight->gylight_sDate;
$sub_array[] = $gylight->gylight_eDate;
$sub_array[] = '<button type="button" class="btn btn-primary radius choose_member" id="'.$gylight->id.'">'.
'Choose'.
'</button>';
$data[] = $sub_array;
}
return response()->json([
'draw' => $request->draw,
'recordsTotal' => Gylight::count(),
'recordsFiltered' => $filter_row,
'data' => $data,
'request' => $filter,
]);
}
return view('admin.guanyin.index');
}
public function gynumber()
{
return $this->belongsTo(Guanyin::class, 'light_gylight_number','gylight_number');
}
public function gynumber()
{
return $this->belongsTo(Guanyin::class, 'sx_ID','gy_sx_ID');
}
观音
public function light()
{
return $this->hasMany(Light::class, 'sx_ID','gy_sx_ID');
}
public function gylight()
{
return $this->hasMany(Gylight::class, 'light_gylight_number','gylight_number');
}
灯光
public function index(Request $request)
{
if($request->header('X-Requested-With') == 'XMLHttpRequest'){
$column = array(
'gylight_number',
'gylight_status',
);
$filter = array();
if($request->order) {
$filter['orderByField'] = $column[$request->order[0]['column']];
$filter['orderBy'] = $request->order[0]['dir'];
}
if($request->status ){
$filter['status'] = $request->status;
}
if($request->search) {
$filter['search'] = $request->search['value'];
}
$filter_row = Gylight::select('*')
->applyFilter($filter)
->count();
$gylight = Gylight::with('detail')
->select('*')
->offset($request->get('start'))
->limit($request->get('length'))
->applyFilter($filter)
->get();
$data = [];
foreach($gylight as $gylight){
$sub_array = array();
$sub_array[] = $gylight->id;
$sub_array[] = $gylight->light_gylight_number;
$sub_array[] = $gylight->status;
$sub_array[] = $gylight->detail->sx_Ename;
$sub_array[] = $gylight->gylight_receipt;
$sub_array[] = $gylight->gylight_sDate;
$sub_array[] = $gylight->gylight_eDate;
$sub_array[] = '<button type="button" class="btn btn-primary radius choose_member" id="'.$gylight->id.'">'.
'Choose'.
'</button>';
$data[] = $sub_array;
}
return response()->json([
'draw' => $request->draw,
'recordsTotal' => Gylight::count(),
'recordsFiltered' => $filter_row,
'data' => $data,
'request' => $filter,
]);
}
return view('admin.guanyin.index');
}
public function gynumber()
{
return $this->belongsTo(Guanyin::class, 'light_gylight_number','gylight_number');
}
public function gynumber()
{
return $this->belongsTo(Guanyin::class, 'sx_ID','gy_sx_ID');
}
然后获取数据:
$gynumber = Guanyin::with(['light','gylight'])->orderBy('gylight_sDate', 'desc')->get();
添加筛选器并连接其他表。
祝你好运 你应该使用雄辩的
有一个到。然后获得如下数据:$sub_array[]=$gylight->light->sx_Ename代码>阅读此处了解更多详细信息:@NgôMinh你能帮我看看我的模型吗?我已经更新了它,但我不确定这是否正确等10分钟,我会给你写我的答案。我尝试使用你编写的hasOneThrough
函数,但看起来它不是wokring。我在这里得到一些错误消息,它是消息:“试图获取非对象的属性'sx_Ename'”
使用dd($gylight->detail)
要查看数据,如果使用eloquent,则无需使用leftJoin
<代码>$gylight=gylight::with('detail')->“其他过滤器或排序…”代码>在返回json到视图之前可以添加($data)吗