Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 如何联接两个表并在datatables中显示_Laravel_Datatables - Fatal编程技术网

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)吗