我正在尝试在CakePHP3中进行LEFT JOIN。 但我得到的只是“没有关联”-Error。
我有两张桌子BORROWERS和IDENTITIES。 在SQL中,这就是我想要的:
var app = angular.module('app', ['ui.grid', 'ui.grid.edit']);
app.controller('MainController', function($scope) {
$scope.gridOptions = {
columnDefs: [{
name: 'startDate',
editableCellTemplate: '<input datepicker ng-model="MODEL_COL_FIELD" readonly>',
enableCellEdit: true,
width: 150
}],
data: [{
startDate: ''
}]
};
});
app.directive('datepicker', ['uiGridEditConstants', function(uiGridEditConstants) {
return {
restrict: 'A',
require: 'ngModel',
compile: function() {
return {
pre: function($scope, $elm, $attrs) {},
post: function($scope, $elm, $attrs) {
function setValueToScope(value) {
eval('$scope.' + $attrs.ngModel + ' = "' + value + '";');
$scope.$apply();
}
$elm = $($elm);
$elm.datepicker({
dateFormat: 'mm/dd/yy',
onSelect: function(date) {
setValueToScope(date);
},
onClose: function() {
$scope.$emit(uiGridEditConstants.events.END_CELL_EDIT);
}
});
$elm[0].focus();
}
};
}
};
}]);
我想这就是我需要的:
SELECT
identities.id
FROM
identities
LEFT JOIN borrowers ON borrowers.id = identities.id
WHERE
borrowers.id IS NULL;
但我得到“身份与借款人无关”。
我还将此添加到我的身份表中:
$var = $identities->find()->select(['identities.id'])->leftJoinWith('Borrowers',
function ($q) {
return $q->where(['borrowers.id' => 'identities.id']);
});
我还需要什么? 感谢名单!
答案 0 :(得分:0)
外键不能只是'id',这不是正确的模型关联。你需要在身份中放置一个'borrower_id'字段,并在Identities模型中声明它:
class Identities extends AppModel {
var $name = 'Identities';
public $belongsTo = array(
'Borrower' => array (
'className' => 'Borrower',
'foreignKey' => 'borrower_id'
)
);
请注意大小写和单数/复数通用命名约定,您的示例至少不会遵循这些约定 - 忽略这些约定会让您很难调试错误。
答案 1 :(得分:0)
烨。它是\ Cake \ ORM \ Table的一个实例,因为我没有很好地选择表名(Identity / Identities)。我想最好不要选择那些障碍,现在我将它重命名为Label / Labels。
此查询现在可以完美运行:
$var = $identities
->find('list')
->select(['labels.id'])
->from('labels')
->leftJoinWith('Borrowers')
->where(function ($q) {
return $q->isNull('borrowers.id');
});