내 질문이 친구가 DataViewer와 코드가 비슷한 다음에 특성을 생성 Data Viewer with Laravel 5.3 and Vue.js이 코드는 어떻게 그리고 왜 작동합니까?
을 기반으로합니다
trait DataViewer
{
// $query should be a Query Builder
public function scopePaginateAndOrder($query)
{
// Validation ...
// Where, Pagination, Order etc ...
return $query->where('foo', 'like', 'bar');
}
}
이제 검색 기능을 추가 할 수있는 설득력 모델에서이 특성을 사용할 수 있습니다.
class Customer extends Model
{
use DataViewer;
}
모든 보통의 물건, 특별한 아무것도 ... 하지만 그때 나는 아직 PHP에서 볼 did't 일부 "마법"이있다. 컨트롤러에서
그는$model = App\Customer::paginateAndOrder();
마지막 코드 같은 것을 내가 이해할 수없는 여러 측면을 가지고 않습니다 않습니다.
- 왜 내가 ::을 사용하여 정적 메소드 방식이 아닌 정적 메서드를 호출 할 수 있습니까?
- 이유 이름에서 범위을 생략 할 수 있습니까?
- 쿼리 작성기 개체를 매개 변수로 전달할 필요는 없습니다. 그러면 특성이 페이지 매김/순서를 원하는 모델에 "알"는 방법은 무엇입니까?
도움의 도움을 주셔서 감사합니다!
'나는 매개 변수로 쿼리 작성기 개체를 전달할 필요가 없습니다. '및'$ 쿼리는 쿼리 작성자 여야합니다.'는 나쁜 습관입니다 (해야 /해야// ...). 왜 함수는 다음과 같이 보이지 않습니다 :'public function scopePaginateAndOrder (QueryBuilder $ query = null)'? '1'에서는 PHP에서'Strict standards : Non-static method'라는 메모/경고를 던지 겠지만, meothod가 호출됩니다. '2.'는 무엇을 의미합니까? – JustOnUnderMillions
그리고 덧붙여서 : 일단 'scopePaginateAndOrder'에 대해서 이야기하고 나서'paginateAndOrder'에 관해서는 diff가 2 개있을 것입니다. 라는 메서드는 동일하지 않습니다. 따라서 scopePaginateAndOrder()를 호출 할 때 'scope'를 생략 할 수 없습니다. 다른 뭔가가 당신의 논리에서 잘못되어 가고 있습니다. – JustOnUnderMillions
좋아, 힌트를 쓰지 않는 매개 변수는 실제로 나쁜 습관이다. 나는 위의 링크 된 비디오에서 복사하여 붙여 넣기 만했다. 그리고 네, 나는 scopePaginateAndOrder() 대신에 paginateAndOrder()를 사용해야합니다. 그렇지 않으면 예외가 발생합니다 – Qobus