số query sẽ không tăng theo số record mà sẽ tăng theo deep của tree, thử check xem kết quả DaiLy::where('affID',2)->with('childrenCategories')->get() có là 1 collection không ? ok rồi thì làm bước tiếp theo
bạn muốn paginate list bao gồm con nó, con của con nó .... đúng không ?
vậy thì phải map lại kết quả, ở đây bạn xử lý ở server, nên bạn có thể viết 1 hàm để map lại nó, trong model hay helper hay gì tùy bạn
pseudocode
function mapDailyChildrenRecursiveToFlatList(Collection $collection, Array $arr = []): Collection {
if (!empty($collection->categories)) {
foreach($collection->categories as $cate) {
// u can exclude some keys u dont want
$arr[] = $cate;
$this->mapDailyChildrenRecursiveToFlatList($cate, $arr);
}
} else {
return collect($arr);
}
}
// in controller
$daily = DaiLy::where('affID',2)->with('childrenCategories')->paginate(2);
$childrenFlatList = mapDailyChildrenRecursiveToFlatList($daily);
return view('view.daily', ['daily' => $childrenFlatList ]);
Cho mình hỏi thêm chút mình muốn phân trang theo kiểu Scroll ở bản Mobile, nhưng trên bản Desktop thì vẫn giữ kiểu phân trang 1,2,3,4,5. Mình thấy dữ liệu có trả về totalCount(tổng số bản ghi), số bản ghi trên 1 trang --> vậy mình đã tính ra được số trang sẽ có.
Nhưng giờ áp dụng kiểu phân trang truyền thống thì mình lấy Scroll Id kiểu gì bạn nhỉ ?
Cảm ơn bạn, có vẻ bạn chưa hiểu ý của mình lắm. Cái mình cần là phân trang mà chưa phân trang được. Nó có 1 điểm khù khoằm ở đây là khi dùng paginate(10) thì nó lấy đủ 10 cái và phân trang nhưng ở đây lại sử dụng đệ quy gọi ngược trở lại và như thế thì những thằng gọi đến child đó nó lại không nằm trong truy vấn nên paginate not work.
Qua Dependency Injection thì Laravel tự new Room rồi truyền vào hàm khởi tạo của Controller. Trong hàm khởi tạo của controller bạn gán cái $room được Laravel đưa cho vào một property để có thể sử dụng lại $room trong các method của controller thông qua $this->room.
Bạn chỉ cần nhớ rằng, __construct trong PHP là một constructor. Trong các ngôn ngữ lập trình hướng đối tượng thì constructor luôn luôn được gọi khi bạn thực hiện tạo mới một instance của Class qua từ khóa new. VD:
classDeveloper{protected$fullName;publicfunction__constructor($fullName){$this->fullName=$fullName;}publicfunctiongetFullName(){return$this->fullName;}}// Tạo mới một instance $huukimit và khởi tạo ngay giá trị cho property $fullName = 'Nguyen Huu Kim':$huukimit=newDeveloper('Nguyen Huu Kim');echo$huukimit->getFullName();
Cái Room $room bạn thêm vào hàm khởi tạo của Controller, lúc này Laravel lúc tạo một instance cho cái Controller đấy nó sẽ thực hiện như sau:
Sau đó nó dùng $controller để gọi vào method tương ứng với route hiện tại. Như bạn thấy, kỹ thuật tự bind arugment như kia được gọi là Dependency Injection nhé! Nó được áp dụng trong cả __constructor của Controller và trong action của Controller và một số chỗ khác nữa.
THẢO LUẬN
@quyen56920 với PHP thuaant thì bạn có thể sử dụng thư viện này nhé https://github.com/mpdf/mpdf
Mình đang viết PHP thuần vì mình làm tool nhỏ thôi, nếu bạn có câu trả lời cho Laravel ,Yii2 or bất kì framework cho kết quả như trên là đc
@quyen56920 bạn có đang dùng framework như Laravel không hay chỉ dùng PHP thuần thế
Mình đang dùng php
anh có nguồn tài liệu về nhận diện giọng không ạ ?
@Plumpboy cảm ơn bạn nghe có vẻ rất hợp lý để mình thử xem.
@tinhtn89 Bạn thử sửa
--->
số query sẽ không tăng theo số record mà sẽ tăng theo deep của tree, thử check xem kết quả
DaiLy::where('affID',2)->with('childrenCategories')->get()có là 1 collection không ? ok rồi thì làm bước tiếp theobạn muốn paginate list bao gồm con nó, con của con nó .... đúng không ?
vậy thì phải map lại kết quả, ở đây bạn xử lý ở server, nên bạn có thể viết 1 hàm để map lại nó, trong model hay helper hay gì tùy bạn
pseudocode
Cảm ơn bạn đã chia sẻ. Bài viết rất hay!
Cho mình hỏi thêm chút mình muốn phân trang theo kiểu Scroll ở bản Mobile, nhưng trên bản Desktop thì vẫn giữ kiểu phân trang 1,2,3,4,5. Mình thấy dữ liệu có trả về totalCount(tổng số bản ghi), số bản ghi trên 1 trang --> vậy mình đã tính ra được số trang sẽ có.
Nhưng giờ áp dụng kiểu phân trang truyền thống thì mình lấy Scroll Id kiểu gì bạn nhỉ ?
Cảm ơn bạn, có vẻ bạn chưa hiểu ý của mình lắm. Cái mình cần là phân trang mà chưa phân trang được. Nó có 1 điểm khù khoằm ở đây là khi dùng paginate(10) thì nó lấy đủ 10 cái và phân trang nhưng ở đây lại sử dụng đệ quy gọi ngược trở lại và như thế thì những thằng gọi đến child đó nó lại không nằm trong truy vấn nên paginate not work.
cho mình hỏi tại sao mình ko run luôn file index.js mà phải run qua file bundle.js ? Mình thấy nó cũng như nhau mà?
Cho mình hỏi là tại sao mình không include file index.js vào file index.html luôn mà phải include file bundle.js. Thấy cũng không khác nhau mà?
cái đầu xài trên ie dc ko bạn
Mình trao đổi trên mail nhá.
Thế còn android thì làm thế nào ạ!
Hihi, mình có note là cái này chỉ là chạy bằng cơm mà, hsau mới tiếp cái auth =))
Qua Dependency Injection thì Laravel tự
new Roomrồi truyền vào hàm khởi tạo của Controller. Trong hàm khởi tạo của controller bạn gán cái$roomđược Laravel đưa cho vào một property để có thể sử dụng lại$roomtrong các method của controller thông qua$this->room.em cảm ơn anh nhiều ak.
Em có gửi mail cho a rồi ạ. a có thời gian rep mail của e với để e xin phép hỏi thêm kiến thức ạ. Em cám ơn
Mình tóm cái váy lại một chút nhé:
__constructtrong PHP là một constructor. Trong các ngôn ngữ lập trình hướng đối tượng thì constructor luôn luôn được gọi khi bạn thực hiện tạo mới mộtinstancecủaClassqua từ khóanew. VD:Room $roombạn thêm vào hàm khởi tạo của Controller, lúc này Laravel lúc tạo một instance cho cái Controller đấy nó sẽ thực hiện như sau:Sau đó nó dùng
$controllerđể gọi vào method tương ứng với route hiện tại. Như bạn thấy, kỹ thuật tự bind arugment như kia được gọi là Dependency Injection nhé! Nó được áp dụng trong cả __constructor của Controller và trongactioncủa Controller và một số chỗ khác nữa.cam on ban nhe