Laravel hasMany với điều kiện where

hoạt động tốt, nhưng nó có vẻ khá phức tạp đối với tôi, vì tôi không cần tải các mô hình liên quan, nếu tôi không sử dụng các điều kiện trong quan hệ của mình

Tôi đã bỏ lỡ một cái gì đó?

Đối với bất kỳ ai quan tâm, tôi cũng đã đăng vấn đề này trên http. // diễn đàn. ấu trùng. io/viewtopic. php?id=10470

Giải pháp tốt nhất

Tôi nghĩ rằng đây là cách chính xác

class Game extends Eloquent {
    // many more stuff here

    // relation without any constraints ...works fine 
    public function videos[] {
        return $this->hasMany['Video'];
    }

    // results in a "problem", se examples below
    public function available_videos[] {
        return $this->videos[]->where['available','=', 1];
    }
}

Và sau đó bạn sẽ phải

$game = Game::find[1];
var_dump[ $game->available_videos[]->get[] ];

Giải pháp liên quan

Php – Laravel, Cách sử dụng where điều kiện cho cột của quan hệ

Tôi không thấy có gì sai khi thực hiện tham gia bên trái ở đây, nếu bạn phải tải từ mô hình Nhà hàng. Tôi có thể trừu tượng hóa nó thành một phương thức trên mô hình Nhà hàng của mình, như vậy

class Restaurant extends Eloquent {
    protected $table = 'restaurants'; // will be default in latest L4 beta

    public function facility[]
    {
      return $this->hasOne['Facility'];
    }

    // Or, better, make public, and inject instance to controller.
    public static function withWifi[]
    {
      return static::leftJoin[
        'restaurant_facilities',
        'restaurants.id', '=', 'restaurant_facilities.restaurant_id'
      ]->where['wifi', '=', 1];
    }
}

Và sau đó, từ các tuyến đường của bạn

Route::get['/', function[]
{
  return Restaurant::withWifi[]->get[];
}];

Đang di chuyển - chưa kiểm tra mã đó, nhưng tôi nghĩ nó sẽ hoạt động. Thay vào đó, bạn có thể sử dụng tải háo hức với một ràng buộc, nhưng điều đó sẽ chỉ xác định xem đối tượng cơ sở có phải là null hay không. Nó vẫn sẽ trả về tất cả các nhà hàng, trừ khi bạn chỉ định mệnh đề where

[P. S. Tôi sẽ gắn bó với hình thức số ít của Cơ sở. Lưu ý cách

$game = Game::with['available_videos']->find[1];
$game->available_videos->count[];
2 không đọc chính xác?]

Php – Cách tạo nhiều truy vấn mệnh đề Where bằng Laravel Eloquent

Trong Laravel 5. 3 [và vẫn đúng kể từ ngày 7. x], bạn có thể sử dụng các vị trí chi tiết hơn được truyền dưới dạng một mảng

$query->where[[
    ['column_1', '=', 'value_1'],
    ['column_2', '', 'value_2'],
    [COLUMN, OPERATOR, VALUE],
    ...
]]

Cá nhân tôi chưa tìm thấy trường hợp sử dụng nào cho việc này chỉ qua nhiều cuộc gọi

$game = Game::with['available_videos']->find[1];
$game->available_videos->count[];
3, nhưng thực tế là bạn có thể sử dụng nó

Cập nhật lần cuối 7 tháng trước

thay vào đó hãy sử dụng hướng dẫn tài liệu Laravel. Khởi tạo một mô hình sau đó thêm tham số

$game = Game::find[1];
var_dump[ $game->available_videos[]->get[] ];
5

public function revisions[]
{
    return $this->hasMany[
       'StudentRevision',
        'sid'
    ];
}

tại bộ điều khiển của bạn

________số 8

#cmiiw

Đăng nhập để tham gia vào chủ đề này

Laravel 5 cung cấp tính năng tuyệt vời như mối quan hệ mô hình. nhưng nếu bạn cần sử dụng mệnh đề where trong mô hình quan hệ của mình thì bạn có thể làm điều đó như thế nào?, Bạn có thể tạo điều kiện where bằng cách sử dụng hàm whereHas. không quan trọng bạn đã sử dụng mối quan hệ nào như một với một, một với nhiều, nhiều với nhiều, có nhiều thông qua, v.v.

Đôi khi bạn có thể cần thêm điều kiện where với mô hình quan hệ của mình, sau đó bạn có thể chỉ cần sử dụng whereHas[] vì tôi cung cấp ví dụ dưới đây với ứng dụng laravel 6, laravel 7, laravel 8 và laravel 9

Vài ngày trước, tôi cũng gặp tình huống tương tự khi sử dụng mối quan hệ của laravel. cần sử dụng nơi có điều kiện như tôi cần để có được những người dùng quốc gia đó là "Ấn Độ". vì vậy tôi viết điều kiện như ví dụ dưới đây

Trong bài viết này, chúng ta sẽ xem điều kiện hùng hồn whereHas[] của laravel 8. Bạn sẽ tìm hiểu về điều kiện wherehas[] trong laravel 8. Tôi sẽ cung cấp cho bạn ví dụ đơn giản về cách sử dụng điều kiện wherehas[] với mối quan hệ hùng hồn của laravel 8. Bạn cũng có thể sử dụng phiên bản laravel 6, laravel 7, laravel 8 và laravel 9

Đối với điều kiện trong laravel 8, chúng tôi cần hai bảng như người dùng và quốc gia và trong bảng người dùng thêm country_id

Vì vậy, hãy xem, laravel 8 có truy vấn ở đâu hoặc laravel 8 có mối quan hệ ở đâu

ví dụ 1. Laravel whereHas[]

Phương thức whereHas[] của Laravel về cơ bản hoạt động giống như has[] nhưng nó chỉ cho phép bạn chỉ định các bộ lọc bổ sung cho mô hình liên quan để kiểm tra

public function index[]
{
    $name = 'india';
    $users = User::with['country']
                    ->whereHas['country', function [$query] use[$name]{
                        $query->where['name', 'like', '%'.$name.'%'];
                    }]
                    ->get[]
                    ->toArray[];
}

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

đọc thêm. Cách lưu trữ dữ liệu trong cơ sở dữ liệu bằng nút. js

ví dụ 2. Laravel có[]

Phương thức has[] của Laravel eloquent được sử dụng để lọc mô hình lựa chọn dựa trên mối quan hệ đã chọn. Nó hoạt động tương tự như phương thức where cho quan hệ

$game = Game::find[1];
var_dump[ $game->available_videos[]->get[] ];
0

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

Bạn cũng có thể chỉ định một toán tử và giá trị đếm để tùy chỉnh thêm truy vấn

$game = Game::find[1];
var_dump[ $game->available_videos[]->get[] ];
1

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

Ví dụ. 3

$game = Game::find[1];
var_dump[ $game->available_videos[]->get[] ];
2

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

ứng dụng/Mô hình/Quốc gia. php

$game = Game::find[1];
var_dump[ $game->available_videos[]->get[] ];
3

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

ứng dụng/Http/Bộ điều khiển/UserController. php

$game = Game::find[1];
var_dump[ $game->available_videos[]->get[] ];
4

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

Bạn cũng có thể thích

đọc thêm. Laravel ví dụ về truy vấn whereIn và whereNotIn

Chủ Đề