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 在哪里不工作的主要内容,如果未能解决你的问题,请参考以下文章

有关 JSON、cURL 和 laravel 的参考文档

我想自学laraver,请诸位前辈给一些建议,谢谢

laravel 网站地图轮子

Larave使用composer安装无反应,提示“Changed current directory to C:/Users/Administrator/AppData/Roaming/Compose

Larave使用composer安装无反应,提示“Changed current directory to C:/Users/Administrator/AppData/Roaming/Compose

laraver框架学习------工厂模型填充测试数据