1 | <?php |
||
18 | trait BaseRelationQuery |
||
19 | { |
||
20 | /** |
||
21 | * @var bool - когда запрос представляет связь с один-ко-многим. Если true, вернуться все найденные модели, иначе только первая |
||
22 | */ |
||
23 | public $multiple; |
||
24 | /** |
||
25 | * @var string - настройка связи моделей. ключ_у_связанной_модели |
||
26 | */ |
||
27 | public $foreignKey; |
||
28 | /** |
||
29 | * @var string - настройка связи моделей. ключ_у_текущей_модели |
||
30 | */ |
||
31 | public $localKey; |
||
32 | /** |
||
33 | * @var BaseBitrixModel - модель, для которой производится загрузка релейшена |
||
34 | */ |
||
35 | public $primaryModel; |
||
36 | /** |
||
37 | * @var array - список связей, которые должны быть подгружены при выполнении запроса |
||
38 | */ |
||
39 | public $with; |
||
40 | |||
41 | /** |
||
42 | * Найти связанные записи для определенной модели [[$this->primaryModel]] |
||
43 | * Этот метод вызывается когда релейшн вызывается ленивой загрузкой $model->relation |
||
44 | * @return Collection|BaseBitrixModel[]|BaseBitrixModel - связанные модели |
||
45 | * @throws \Exception |
||
46 | */ |
||
47 | public function findFor() |
||
51 | |||
52 | /** |
||
53 | * Определяет связи, которые должны быть загружены при выполнении запроса |
||
54 | * |
||
55 | * Передавая массив можно указать ключем - название релейшена, а значением - коллбек для кастомизации запроса |
||
56 | * |
||
57 | * @param array|string $with - связи, которые необходимо жадно подгрузить |
||
58 | * // Загрузить Customer и сразу для каждой модели подгрузить orders и country |
||
59 | * Customer::query()->with(['orders', 'country'])->getList(); |
||
60 | * |
||
61 | * // Загрузить Customer и сразу для каждой модели подгрузить orders, а также для orders загрузить address |
||
62 | * Customer::find()->with('orders.address')->getList(); |
||
63 | * |
||
64 | * // Загрузить Customer и сразу для каждой модели подгрузить country и orders (только активные) |
||
65 | * Customer::find()->with([ |
||
66 | * 'orders' => function (BaseQuery $query) { |
||
67 | * $query->filter(['ACTIVE' => 'Y']); |
||
68 | * }, |
||
69 | * 'country', |
||
70 | * ])->all(); |
||
71 | * |
||
72 | * @return $this |
||
73 | */ |
||
74 | public function with($with) |
||
93 | |||
94 | /** |
||
95 | * Добавить фильтр для загрзуки связи относительно моделей |
||
96 | * @param Collection|BaseBitrixModel[] $models |
||
97 | */ |
||
98 | protected function filterByModels($models) |
||
130 | |||
131 | /** |
||
132 | * Подгрузить связанные модели для уже загруденных моделей |
||
133 | * @param array $with - массив релейшенов, которые необходимо подгрузить |
||
134 | * @param Collection|BaseBitrixModel[] $models модели, для которых загружать связи |
||
135 | */ |
||
136 | public function findWith($with, &$models) |
||
150 | |||
151 | /** |
||
152 | * @param BaseBitrixModel $model - модель пустышка, чтобы получить запросы |
||
153 | * @param array $with |
||
154 | * @return BaseQuery[] |
||
155 | */ |
||
156 | private function normalizeRelations($model, $with) |
||
189 | /** |
||
190 | * Находит связанные записи и заполняет их в первичных моделях. |
||
191 | * @param string $name - имя релейшена |
||
192 | * @param array $primaryModels - первичные модели |
||
193 | * @return Collection|BaseBitrixModel[] - найденные модели |
||
194 | */ |
||
195 | public function populateRelation($name, &$primaryModels) |
||
205 | } |
||
206 |
This check looks for methods that are used by a trait but not required by it.
To illustrate, let’s look at the following code example
The trait
Idable
provides a methodequalsId
that in turn relies on the methodgetId()
. If this method does not exist on a class mixing in this trait, the method will fail.Adding the
getId()
as an abstract method to the trait will make sure it is available.