tôi đang làm việc trên Laravel 4. Như tôi biết, tôi có thể làm subquery:Làm thế nào để tùy chỉnh cơ sở dữ liệu Laravel của Query Builder (chắc subquery tốt hơn)
Project::whereIn('project_id', function($q) {
$q->select('project_id')
->from('company')
->whereNull('deleted_at');
});
tôi thấy biến chứng, mà tôi có thể' t sử dụng phạm vi trong truy vấn phụ và vô hiệu hóa soft_delete làm cho tôi thay đổi mã nguồn rất nhiều.
Tôi muốn nó là:
Project::whereIn('project_id', function(&$q) {
$q = Company::select('project_id')->getQuery();
});
Bây giờ, tôi có thể thêm phạm vi, vô hiệu hóa soft_delete dễ dàng.
tôi đã cố gắng, và tìm thấy một giải pháp, mà tôi phải thay đổi mã Laravel của Cơ sở dữ liệu \ Query \ Builder, chức năng whereInSub, dòng 786.
call_user_func($callback, $query = $this->newQuery());
tới:
$query = $this->newQuery();
call_user_func_array($callback, array(&$query));
Đó là có hại cho sửa đổi Nhà cung cấp khung của Laravel. Vì vậy, tôi muốn hỏi làm thế nào để làm điều đó một cách an toàn.
Xin lỗi vì tiếng Anh xấu của tôi.
Cảm ơn bạn đã đọc.
Tôi đã chỉnh sửa câu hỏi của mình vì tôi đã tìm thấy giải pháp. Cần ghi đè hàm được bảo vệ newBaseQueryBuilder() trong lớp mới MyModel –
Không cần bao gồm danh sách "sử dụng" trừ khi bạn thực sự ... sử dụng chúng trong lớp con của bạn. Trong trường hợp này, bạn chỉ cần MyQueryBuilder của bạn, cái mà sẽ được sử dụng trong phiên bản mới của newBaseQueryBuilder() như @ LêTrầnTiếnTrung được chỉ ra một cách chính xác. – LePhleg