【发布时间】:2022-01-19 08:32:46
【问题描述】:
我正在尝试从user 表中获取nickname 以替换用于在我的数据表中显示的media_order 中的nik,因为目前我的数据表中的media_order 仍然显示顺序基于他们的nik 创建如下:
这是我的users 表:
所以,如您所见,我正在尝试使用nickname 来显示在我的数据表中,而不是他们的nik,这是我的controller.php:
public function index(Request $request)
{
if ($request->ajax()) {
if(auth()->user()->is_admin){
$data = MediaOrder::get();
}elseif(auth()->user()->group_id){
$data = MediaOrder::memberOf(auth()->user()->group_id)->get();
}else{
$data = MediaOrder::get();
}
return DataTables::of($data)
->addIndexColumn()
->addColumn('action',function($row){
$btn = '<a style="margin:5px" href="javascript:void(0)" id="viewMediaOrder" data-toggle="tooltip" data-id="'.$row->id.'" data-original-title="View" class="edit btn btn-primary btn-sm button1 viewMediaOrder" value="{{ csrf_token() }}"><i class="fa fa-eye mr-1"></i>View</a>';
if($row->isdisabled == 0 && !auth()->user()->is_traffic){
$btn = $btn.'<a style="margin:5px" href="javascript:void(0)" id="editMediaOrder" data-toggle="tooltip" data-id="'.$row->id.'" data-original-title="Edit" class="edit btn btn-warning btn-sm button1 editMediaOrder" value="{{ csrf_token() }}"><i class="fa fa-pencil mr-1"></i>Edit</a>
<a style="margin:5px" href="javascript:void(0)" data-toggle="tooltip" id="disableMediaOrder" data-id="'.$row->id.'" data-original-title="Delete" class="btn btn-danger btn-sm button1 disableMediaOrder" value="{{ csrf_token() }}"><i class="fa fa-power-off mr-1"></i>Disable</a>';
}
return $btn;
})
->addColumn('created_by', function($row){
return $row->userss->nickname;
})
->editColumn('is_traffic_viewed', function($row){
if(($row->is_traffic_viewed == 0 && auth()->user()->is_traffic) && $row->isdisabled == 0){
$combo = '<input data-id="'.$row->id.'" type="checkbox" class="checkedTraffic">Check</input>';
return $combo;
}elseif($row->is_traffic_viewed == 0){
$row = "Unchecked";
return $row;
}elseif($row->is_traffic_viewed == 1){
$row = "Checked";
return $row;
}elseif(!auth()->user()->is_traffic){
$row = $row->is_traffic_viewed;
return $row;
}
})
->editColumn('attachment_name',function($row){
$data = json_decode($row['attachment_name'], true);
$res = ''; $count = count($data);
foreach ($data as $value){
$res .= $value;
if($count > 1){
$res .= ', ';
}
$count--;
}
return $res;
})
->rawColumns(['action','is_traffic_viewed'])
->make(true);
} else {
\Meta::set('title', 'Media Order');
$groups = Group::all();
$media_order = DB::table('media_order')->get();
$moo = MediaOrder::get();
$selected = auth()->user()->group_id;
$mediaOrder = MediaOrder::all()->first();
$users = User::orderBy('name', 'asc')->get();
return view('media-order.index')->with(compact('users','moo','groups','selected','mediaOrder'));
}
}
这是我的UserModel:
public function media()
{
return $this->hasMany(MediaOrder::class);
}
这是我的mediaOrder 模型:
public function userss()
{
return $this->belongsToMany(User::class, 'id')->get();
}
到目前为止,我已经尝试像这样编辑我的function index:
$data= MediaOrder::with('userss')->select('media_order.*')->get();
并添加editColumn 以替换nik 为nickname,如下所示:
->addColumn('created_by', function($row){
return $row->userss->nickname;
})
但最终出现了这样的 SQL 错误:
LOG.error: SQLSTATE[42S02]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]无效的对象名称“id”。 (SQL: select [users].*, [id].[media_order_id] as [pivot_media_order_id], [id].[user_id] as [pivot_user_id] from [users] inner join [id] on [users].[id] = [id].[user_id]) {"userId":"100","exception":{"errorInfo":["42S02",208,"[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]无效的对象名称'id'。"]}
任何人都可能有替代方法或解决方案?,非常感谢任何帮助。谢谢!
【问题讨论】:
标签: sql-server laravel datatable