*/ abstract protected function compositeKeyColumns(): array; /** * Valeur de la clé sous forme de tableau « colonne => valeur ». * * @return array */ public function getKey() { $key = []; foreach ($this->compositeKeyColumns() as $column) { $key[$column] = $this->getAttribute($column); } return $key; } /** * Cible chaque colonne de la clé composite lors d'un save / update. * * @param Builder $query * @return Builder */ protected function setKeysForSaveQuery($query) { foreach ($this->compositeKeyColumns() as $column) { $query->where($column, '=', $this->getKeyForSaveQuery($column)); } return $query; } /** * Valeur d'une colonne de la clé pour un save (valeur d'origine si dispo). * * @param string|null $column * @return mixed */ protected function getKeyForSaveQuery($column = null) { $column ??= $this->getKeyName(); return $this->original[$column] ?? $this->getAttribute($column); } /** * Cible chaque colonne de la clé composite lors d'une sélection par clé. * * @param Builder $query * @return Builder */ protected function setKeysForSelectQuery($query) { foreach ($this->compositeKeyColumns() as $column) { $query->where($column, '=', $this->getKeyForSelectQuery($column)); } return $query; } /** * Valeur d'une colonne de la clé pour une sélection. * * @param string|null $column * @return mixed */ protected function getKeyForSelectQuery($column = null) { $column ??= $this->getKeyName(); return $this->original[$column] ?? $this->getAttribute($column); } }