CakePHP3のHasManyに動的にソートを適用する。

注文(Orders) > 発注書(PurchaseOrders) > 業者(Supplier)がありました。
select条件2のみであればOrdersのHasManyで設定すればよいがselect条件1でエラーとなる。

select条件1:業者まで繋げない

Orders>PurchaseOrders

select条件2:業者まで繋げる。

Orders>PurchaseOrders>Suppliers

HasManyクラスのsetSort()を使う。

$this->Orders->PurchaseOrders->setSort(['Suppliers.name'=>'asc']);

で動的に設定できます。

すでに既存のSortが設定されている場合。

(バージョン 3.5.17にて確認)
ソースコードをみると、$this->_sortを上書きしているだけのセッターなので、そのまま上書きな感じでした。

/**
 * Sets the sort order in which target records should be returned.
 *
 * @param mixed $sort A find() compatible order clause
 * @return $this
 */
public function setSort($sort)
{
    $this->_sort = $sort;

    return $this;
}