【发布时间】: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 ]