C'è un piccolo trucco utilizzando morbido eliminare le tabelle e query in laravel:
Quando creiamo qualcosa di simile
$objCars = Car::where("color","blue");
Il sistema esegue qualcosa del genere:
SELECT
*
FROM
cars
WHERE
deleted_at IS NULL
AND
"color" = 'blue'
Finora, tutto bene.Ma, quando applichiamo il metodo "orWhere", qualcosa di divertente succede
$objCars = Car::where("color","blue")->orWhere("color","red");
Il sistema eseguirà una cosa del genere:
SELECT
*
FROM
cars
WHERE
deleted_at IS NULL
AND
"color" = 'blue'
OR
"color" = 'red'
Questa nuova query restituirà tutte le auto in cui deleted_at è nullo e la il colore è blu OPPURE se il colore è rosso, anche se delete_at non è nullo. E 'lo stesso comportamento di questa altra domanda, quello che mostrano il problema in modo più esplicito:
SELECT
*
FROM
cars
WHERE
(
deleted_at IS NULL
AND
"color" = 'blue'
)
OR
"color" = 'red'
di fuggire da questo problema, è necessario modificare il metodo di "dove" il superamento di un chiusura. Come quella:
$objCars = Car::where(
function ($query) {
$query->where("color","blue");
$query->orWhere("color","red");
}
);
Quindi, il sistema eseguirà una cosa del genere:
SELECT
*
FROM
cars
WHERE
deleted_at IS NULL
AND
(
"color" = 'blue'
OR
"color" = 'red'
)
Questa ultima query, ricerche per tutte le auto in cui deleted_at è nullo e dove il colore può essere rosso o blu, come volevamo che lo facesse.
è possibile inserire il codice in cui si eliminano gli oggetti e anche dove li si richiede di visualizzare nella pagina? – msturdy
grazie, ho già risolto il problema ... stavo usando le query Fluent invece di Eloquent, questo era il motivo di questo comportamento –
Per i futuri visitatori: [leggi questo se stai usando 4.2] (https://laracasts.com/ forum /? p = 1766-laravel-4-2-soft-deletes-issue/0) – zehelvion