【问题标题】:Laravel Model::find($id) doesn't filter resultsLaravel Model::find($id) 不过滤结果
【发布时间】:2018-06-13 06:11:21
【问题描述】:

我正在尝试编辑一列数据表以在我的索引视图表中显示信息。

这是我在视图中通过 Ajax 调用的控制器方法:

public function getField(){

       // Current User
        $user_id = \Auth::user()->id;
        $users = User::find($user_id)->users();
        return Datatables::of($users )
          ->editColumn('id', '<a href="'.url('users').'/{{$id}}/edit">Edit</a>')
          ->editColumn('fields_id', function($users) {
             $mystring = '';
             $fields_id_array = json_decode($users->fields_id);
             foreach($fields_id_array as $f_id){         

                /* this works */  
                // $mystring  .=  Fields::where('id', '=', $f_id) -> pluck('field_name');

                /* this doesn't work */  
                $mystring  .=  Fields::find($f_id) -> pluck('field_name');
             }
             return $mystring;
          })
          ->rawColumns(['id'])
          ->make(true);
      }

users 表中的字段 'fields_id' 是一个 JSON 字段,如下所示:['1','2','5'],这些是指另一个表的 id:'Fields'。

我已经阅读了这个questions,但我认为我的数据库表没问题,因为增量在Laravel migrations 中是等效的主键。

这是我对表“字段”的迁移:

public function up()
    {
        Schema::defaultStringLength(191);
        Schema::create('fields', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('users');
            $table->string('code')->unique();
            $table->string('param1');
            $table->string('param3')->nullable();
            $table->timestamps();
        });
    }

谢谢

【问题讨论】:

  • 您在使用软删除吗?查询生成器 where 还返回(查找)“软删除”条目,其中 find 不包括那些。另外,你的 $az_id 变量是什么类型(它的值是什么)?
  • 不,我没有使用软删除。我忘了添加 find($az_id) 将“字段”表的所有记录返回给我。
  • 对不起。 $az_id 是错误的。正确的名称是 $f_id,它是一个整数。
  • 嗯...你使用的是什么版本的 laravel?如果您尝试在“修补程序”模式下运行这两个语句,您是否尝试检查返回的内容?
  • 我使用的是 Laravel 5.4 版本。我不知道它是什么“修补”模式,但如果我尝试这个,在循环之外: Fields::find(1) -> pluck('field_name');我找回了这个 [''Name1","Name2", ... "NameN"]

标签: laravel datatable eloquent laravel-migrations yajra-datatable


【解决方案1】:

根据您最后的评论,这里是一个疯狂的猜测......

在你的循环中试试这个

$mystring  .=  Fields::find(intval($f_id))->pluck('field_name');

我已经在你的$f_id 周围添加了 intval() 函数,因为你说它们是这种格式 ['1','2','5']。这是一个字符串数组(如果您打算将它们与find() 函数一起使用,则应该将其转换为整数。

【讨论】:

  • 我试过这个:$mystring .= Fields::find(intval($f_id))->pluck('field_name');但不起作用。我也可以这样做: $fields_id_array = json_decode($user->fields_id); $fields_array = Fields::whereIn('id',$fields_id_array)->pluck('field_name')->toArray();它有效,但我不明白为什么查找不起作用
  • 如果你 dd($fields_id_array);就在循环之前?因为就像你说的......如果你打电话给 Fields::find(1) -> pluck('field_name');你确实得到了你想要的数组,这就是为什么我认为问题在于你作为参数传递的值
  • 我不能调用 dd() 但 print_r($fields_id_array) 返回这个: Array ( [0] => 1 [1] => 3 ) 在这种情况下,我的循环全部退出两次记录:["Name1","Name2","Name3"] ["Name1","Name2","Name3"]
  • 我向问题添加了另一个细节。如果我调用方法 getKeyName();这样:(new Fields)->getKeyName();它得到正确的密钥“id”。
  • 抱歉,我没有办法尝试...只是为了检查我是否正确理解了问题...当您运行 $mystring .= Fields::where('id', '= ', $f_id) -> pluck('field_name');在循环内部,您可以正确返回结果,如果您运行 $mystring .= Fields::find($f_id) -> pluck('field_name');那么你什么都得不到?同样在我写这篇文章时,您是否尝试过打印(var_dump)您尝试附加到 $mystring 的结果(如果这是一个可能导致某些问题的数组)
猜你喜欢
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 2015-01-15
  • 2014-10-17
相关资源
最近更新 更多