i have the following MSSQL query that scans the todo table and updates rows based on the data it gets from a query.
UPDATE Todo
SET completedDate = todoCalls.minDate
FROM Todo todoTable
JOIN (SELECT Todo.id, MIN(CloudCall.CloudCallHistory.CallStarted) AS minDate
FROM Todo
JOIN CloudCall.CloudCallHistory ON CloudCall.CloudCallHistory.ObjectId = Todo.foreignId
JOIN CloudCall.CloudCallNotebookTypeCategoryLink ON CloudCall.CloudCallNotebookTypeCategoryLink.CategoryCode = CloudCall.CloudCallHistory.CategoryId
JOIN NotebookTypes ON NotebookTypes.NotebookTypeId = CloudCall.CloudCallNotebookTypeCategoryLink.NotebookTypeId
WHERE CloudCall.CloudCallHistory.CallStarted > Todo.foreignDate
AND Todo.completedDate IS NULL
AND Todo.cancelledDate IS NULL
AND NotebookTypes.NotebookFolderId = 175
AND CloudCall.CloudCallHistory.CategoryId != 17427
AND Todo.TypeId = 1
GROUP BY Todo.id) AS todoCalls ON todoCalls.id = todoTable.id
This works fine in MSSQL but now im trying to convert it to a laravel/ eloquent query.
First I did the select which is:
$calls = Self::selectRaw('todo.id, MIN(CloudCall.CloudCallHistory.CallStarted) AS minDate')
->join('CloudCall.CloudCallHistory', 'CloudCall.CloudCallHistory.ObjectId', 'Todo.foreignId')
->join('CloudCall.CloudCallNotebookTypeCategoryLink', 'CloudCall.CloudCallNotebookTypeCategoryLink.CategoryCode', 'CloudCall.CloudCallHistory.CategoryId')
->join('NotebookTypes', 'NotebookTypes.NotebookTypeId', 'CloudCall.CloudCallNotebookTypeCategoryLink.NotebookTypeId')
->where('CloudCall.CloudCallHistory.CallStarted', '>', DB::Raw('[Todo].[foreignDate]'))
->whereNull('todo.completedDate')
->whereNull('todo.cancelledDate')
->where('NotebookTypes.NotebookFolderId', 175)
->where('CloudCall.CloudCallHistory.CategoryId', '!=', 17427)
->where('todo.typeId', $typeId)
->groupBy('todo.id');
When i view the results of this, I get the data I expect so the select part is correct. Now im trying to do the parts outside it and Im getting the error where I try to declare the table name allias. Here is what I have so far:
$query = DB::connection("sqlsrv")
->table('todo AS todoTable')
->update(['completedDate' => 'todoCalls.minDate'])
->joinSub($calls, 'todoCalls', function ($join)
{
$join->on('todoCalls.id', 'todoTable.id');
});
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire