Mối quan hệ của Laravel với cột JSON

Là một lập trình viên thông thường, Tìm kiếm nâng cao là điều thỉnh thoảng bạn gặp phải. Gần đây tôi đã triển khai nó trong Laravel. mà tôi sẽ giải thích ở đây

Điều kiện tiên quyết - giả định rằng bạn có kiến ​​thức cơ bản về Kiến trúc Laravel và chức năng của nó như cách thức hoạt động của mô hình, bộ điều khiển và định tuyến

Được rồi, vì vậy chúng tôi có một

namespace App;

use Illuminate\Database\Eloquent\Model;

class Biodata extends Model
{
    protected $guarded = [];

    protected $casts = [
       'biodata' => object
    ];

    protected $perPage = 10;

}

0
namespace App;

use Illuminate\Database\Eloquent\Model;

class Biodata extends Model
{
    protected $guarded = [];

    protected $casts = [
       'biodata' => object
    ];

    protected $perPage = 10;

}

1 như tên đại diện cho nó lưu dữ liệu sinh học của người dùng. Và đây là cách di chuyển của nó trông như thế nào

di cư

$table->id[];
$table->enum['gender',['boy','girl']];
$table->string['name',255];
$table->json['biodata'];
$table->timestamps[];

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Như bạn có thể thấy, chúng tôi có một cột trong bảng

namespace App;

use Illuminate\Database\Eloquent\Model;

class Biodata extends Model
{
    protected $guarded = [];

    protected $casts = [
       'biodata' => object
    ];

    protected $perPage = 10;

}

0 là kiểu JSON. Điều này cho phép chúng tôi lưu JSON trong db của chúng tôi. Và chúng ta sẽ sử dụng tính năng truyền thuộc tính để tự động chuyển đổi nó thành đối tượng khi tìm nạp. Vì vậy, mô hình Biodata của chúng tôi sẽ trông như thế này

Kiểu mẫu

namespace App;

use Illuminate\Database\Eloquent\Model;

class Biodata extends Model
{
    protected $guarded = [];

    protected $casts = [
       'biodata' => object
    ];

    protected $perPage = 10;

}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Bây giờ trước khi đi xa hơn, hãy xem đối tượng Biodata của chúng ta trông như thế nào

Nhà máy

return [
            'gender' => $this->faker->randomElement[$this->gender],
            'name'=> $this->faker->name[],
            'biodata' => [
                'personal'=>[
                    'qualification' => $this->faker->randomElement[$this->qualification],
                    'height'=>$this->faker->randomElement[$this->height],
                    'income'=>$this->faker->numberBetween[100000,1000000],
                    'occupation' => $this->faker->randomElement[$this->jobs],
                ],
                'family'=>[
                    'father_gotra' => $this->faker->randomElement[$this->gotra],
                    'mother_gotra' => $this->faker->randomElement[$this->gotra],
                ],
                'contact'=>[
                    'state' => $this->faker->randomElement[$this->indianStates],
                ]
            ],
        ];

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Và trên tất cả các trường này, chúng tôi sẽ thực hiện tìm kiếm.
Bây giờ là lúc thảo luận về những gì chúng tôi muốn nhận được từ chức năng tìm kiếm của mình. Vì vậy, đây là tất cả các tham số tìm kiếm tùy chọn của chúng tôi

  • Giới tính
    • Giá trị duy nhất
    • loại trường - ENUM
  • Bằng cấp
    • Có thể là nhiều giá trị
    • loại trường - Khóa JSON
  • Chiều cao tối thiểu
    • Giá trị duy nhất
    • loại trường - Khóa JSON
  • Thu nhập
    • Giá trị duy nhất
    • loại trường - Khóa JSON
  • Nghề nghiệp
    • Giá trị duy nhất
    • loại trường - Khóa JSON
  • gotra
    • nhiều giá trị
    • loại trường - Khóa JSON

Bây giờ điều này có vẻ rất đơn giản đối với bạn, tất cả những gì bạn phải sử dụng là câu lệnh

namespace App;

use Illuminate\Database\Eloquent\Model;

class Biodata extends Model
{
    protected $guarded = [];

    protected $casts = [
       'biodata' => object
    ];

    protected $perPage = 10;

}

3 và bạn sẽ ổn NHƯNG hãy giữ ngựa của bạn và Trước tiên hãy xem xét một số vấn đề rõ ràng

Tìm kiếm trong trường JSON?

Vậy chúng ta sẽ tìm kiếm trong JSON như thế nào?

return $query->where['biodata->personal->income', '>=', $minIncome];

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Kiểm tra đối tượng Biodata ở trên để hiểu

Nhiều giá trị

Bây giờ trước khi nhảy vào mã để viết chức năng tìm kiếm, một câu hỏi mà bạn có thể hỏi là làm thế nào bạn có thể gửi nhiều giá trị trong một chuỗi truy vấn?

________số 8

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Bây giờ chúng ta có thể tách chúng đơn giản bằng cách sử dụng “,” và nó sẽ cung cấp cho chúng ta một mảng các giá trị cho tham số đó

Làm cách nào để thêm nhiều truy vấn vào câu lệnh where?

Vì vậy, đây là một câu lệnh where tiêu chuẩn từ tài liệu của Laravel

DB::table['users']->where['votes', 100]->get[];

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Và chúng tôi cũng có một cái tốt hơn

namespace App;

use Illuminate\Database\Eloquent\Model;

class Biodata extends Model
{
    protected $guarded = [];

    protected $casts = [
       'biodata' => object
    ];

    protected $perPage = 10;

}

0

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Tại đây, bạn có thể thêm nhiều đối số vào câu lệnh where,
Nhưng chúng tôi cần phải có một số loại xác thực trước khi thực sự chuyển sang chạy bất kỳ truy vấn nào, vì tất cả các tham số đều là tùy chọn nên người dùng .

Và do đó chúng ta cần viết thêm mã khi tìm kiếm với where và đó là nơi mà

namespace App;

use Illuminate\Database\Eloquent\Model;

class Biodata extends Model
{
    protected $guarded = [];

    protected $casts = [
       'biodata' => object
    ];

    protected $perPage = 10;

}

4 đến để cứu chúng ta. Đây là những gì tài liệu chính thức nói về nó

Đôi khi bạn có thể muốn các mệnh đề chỉ áp dụng cho một truy vấn khi điều gì đó khác là đúng. Chẳng hạn, bạn có thể chỉ muốn áp dụng câu lệnh where nếu có giá trị đầu vào đã cho trong yêu cầu đến. Bạn có thể thực hiện việc này bằng cách sử dụng phương thức when

Và đây là cách bạn viết nó

namespace App;

use Illuminate\Database\Eloquent\Model;

class Biodata extends Model
{
    protected $guarded = [];

    protected $casts = [
       'biodata' => object
    ];

    protected $perPage = 10;

}

2

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Nhưng chúng ta có một vấn đề nữa, làm thế nào để chúng ta thêm nhiều giá trị cho cùng một tham số, đối số thứ hai của when là một hàm và chúng ta có thể làm bất cứ điều gì trong hàm này. ] hãy đọc tiếp

Vì vậy, để kiểm tra nhiều giá trị cho cùng một tham số, chúng ta sẽ sử dụng một vòng lặp trong đó và đây là giao diện của nó

namespace App;

use Illuminate\Database\Eloquent\Model;

class Biodata extends Model
{
    protected $guarded = [];

    protected $casts = [
       'biodata' => object
    ];

    protected $perPage = 10;

}

3

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

À chính nó đấy. chúng tôi đã đề cập đến tất cả những điều cơ bản mà chúng tôi sẽ cần để viết chức năng tìm kiếm. và đây là cách nó sẽ trông như thế nào

namespace App;

use Illuminate\Database\Eloquent\Model;

class Biodata extends Model
{
    protected $guarded = [];

    protected $casts = [
       'biodata' => object
    ];

    protected $perPage = 10;

}

4

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Tôi đã làm theo cách tiếp cận TDD trong khi phát triển cái này nên tôi đã tạo các bài kiểm tra trước, hãy cho tôi biết nếu có ai trong số các bạn muốn kiểm tra chúng. Gửi tin nhắn cho tôi và tôi sẽ chia sẻ mã

Chủ Đề