Laravel json 在哪里不工作
Posted
技术标签:
【中文标题】Laravel json 在哪里不工作【英文标题】:Laravel json where not working 【发布时间】:2018-09-25 23:09:22 【问题描述】:我在 json 结构中尝试where
查询。但总是返回null
。我做错了吗?
我在模型中的作用域方法:
public function scopeWhereDeveloper(Builder $scope)
return $scope->where('parameters->developer','yes');
我在模型中的静态方法:
public static function getDeveloper($columns = ['*'])
return static::whereDeveloper()->first($columns);
迁移:
public function up()
Schema::create('admins', function(Blueprint $table)
$table->increments('id');
$table->string('full_name');
$table->string('user_name')->unique();
$table->string('email')->unique();
$table->string('password');
$table->json('parameters')->nullable();
$table->timestamps();
$table->rememberToken();
);
测试方法:
/** @test */
public function it_can_get_admin_developer_by_parameter()
$admin = create(Admin::class, ['parameters' => ['developer' => 'yes']]);
$developer = Admin::getDeveloper();
dd($developer); // return null
$this->assertEquals($admin->email,$developer->email);
那我该怎么办?
太有趣了。当我使用这个查询时:
return->where('parametersdeveloper','yes');
总是返回 null。但是当我在HomeController
中使用 ::getDeveloper()` 进行测试时,我可以获得用户。为什么会这样?
【问题讨论】:
你的 Laravel 版本是多少? Laravel 版本为5.6
你的测试中dd($admin->getAttributes())
的结果是什么?
array:8 [ "full_name" => "Jalen" "user_name" => "mertz.kevon" "email" => "rwill@kozey.net" "password" => "$2y$04$LJ9XSw1cu1i8e.WurqNCZe09t4zxFiUTaggZluuKK2hbC.52kcbba" "parameters" => ""developer":"yes"" "updated_at" => "2018-04-16 15:30:51" "created_at" => "2018-04-16 15:30:51" "id" => 1 ]
【参考方案1】:
不要使用 where
前缀命名范围。 Eloquent 会假设您正在尝试使用 ->where('developer')
的简写。
将你的作用域重命名为scopeDeveloper
【讨论】:
@ysfkaya 如果将其重命名为scopeDeveloper
,则需要将其用作Model::developer()
是的,我注意到了,它在 Controller
中有效,但在测试中仍返回 null
。你知道为什么吗?以上是关于Laravel json 在哪里不工作的主要内容,如果未能解决你的问题,请参考以下文章
Larave使用composer安装无反应,提示“Changed current directory to C:/Users/Administrator/AppData/Roaming/Compose
Larave使用composer安装无反应,提示“Changed current directory to C:/Users/Administrator/AppData/Roaming/Compose