【问题标题】:Laravel - using username instead id from other tableLaravel - 使用用户名而不是其他表中的 id
【发布时间】: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 以替换niknickname,如下所示:

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


    【解决方案1】:

    belongsToMany() 方法的第二个参数是中间表,而不是提供功能键的列。

    赠品在您正在寻找的错误消息中:

    [id].[media_order_id]
    

    因为 'id' 不太可能是表的名称。果然,你的 users() 方法在 Laravel 期望找到表名的地方定义了 'id'。

    public function userss() {
        return $this->belongsToMany(User::class, 'id')->get();
    }
    

    【讨论】:

      猜你喜欢
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 2017-04-22
      • 2014-07-11
      • 1970-01-01
      相关资源
      最近更新 更多