У меня есть объект данных, связанный с некоторыми другими объектами данных, и я пытаюсь создать для них страницу отчетности.SilverStripe 3 Left Join Missing аргумент
До сих пор у меня есть код ниже в моем контролере страницы, чтобы отобразить форму, где я начну выбирать параметры фильтрации для отчета.
Однако я получаю эту ошибку из-за соединения слева:
[Предупреждение] Отсутствует аргумент 2 для SQLQuery :: addLeftJoin()
Казалось бы, что raw2sql выводит этот когда я отлажена:
\ 'AgeRangeData \', \ 'CallEvent.AgeRangeData ID = AgeRangeData.ID) \'
Я предполагаю, что обратная косая черта это то, что вызывает ошибку
public function ReportingFilter(){
$DataObjectsList = $this->dbObject('DataObjects')->enumValues();
$fields = new FieldList(
new DropdownField('DataObjects', 'Data Objects', $DataObjectsList)
);
$actions = new FieldList(
new FormAction("FilterObjects", "Filter")
);
return new Form($this, "ReportingFilter", $fields, $actions);
}
public function FilterObjects($data, $form){
$data = $_REQUEST;
$query = new SQLQuery();
$object = $data['DataObjects'];
$leftJoin = Convert::raw2sql("'" . $object . "', 'CallEvent." . $object . " ID={$object}.ID)'");
$query->selectField("CallEvent.ID", "ID");
$query->setFrom('`CallEvent`');
$query->setOrderBy('CallEvent.Created DESC');
$query->addLeftJoin($leftJoin);
return $query;
}
Не успевайте их протестировать и добавьте в качестве ответа, а как-то: Convert :: raw2sql следует использовать для преобразования значения (или массива) не полного запроса. См. Http://docs.silverstripe.org/en/3.1/developer_guides/security/secure_coding/. Предупреждение исходит из вашего использования addLeftJoin и является довольно явным, когда он говорит о недостающем аргументе два: $ query-> addLeftJoin ($ leftJoin); должно быть больше или меньше -> addLeftJoin ($ tablename, $ joinstatement) –
Мое предложение состоит в том, чтобы заставить левое соединение работать с жестко заданными значениями, прежде чем пытаться добавить биты формы динамически –