2014-12-04 7 views
7

Sto lavorando a un progetto in cui dispongo di un mercato di una tabella con una colonna buyer_id e una colonna seller_id. Quando un venditore mette qualcosa sul mercato, seller_id e buyer_id sono gli stessi, il che significa che il prodotto è in vendita in questo momento. Dopo la vendita, l'acquirente_id cambia in chiunque abbia acquistato il prodotto.Trova due colonne in laravel che hanno valori uguali via Eloquent?

Ora il posto nella mia applicazione in cui sto mostrando tutti i prodotti in vendita che sto facendo questa domanda tramite eloquente:

$market_records = Market::where('seller_id', '!=', Auth::user()->id)->where('seller_id', '=', 'buyer_id')->get(); 

Voglio solo i prodotti in su per la vendita che non sono dallo stesso utente chi ha effettuato l'accesso e desidero avere solo quei prodotti in cui sia seller_id che buyer_id. Ora il problema nella seconda istruzione where è che si sta confrontando il seller_id con la stringa 'buyer_id' che non è quello che voglio. Qual è il modo con cui posso recuperare solo i record in cui buyer_id è uguale a seller_id.

risposta

13

è necessario utilizzare whereRaw per farlo:

$market_records = Market::where('seller_id', '!=', Auth::user()->id)->whereRaw('seller_id = buyer_id')->get(); 
+0

Funziona come un fascino. Grazie. – Rohan

3

Opzione 1: ->whereRaw('column1 = column2')

Opzione 2: Quando in vendita buyer_id == null = seller_id, ->where('buyer_id', '=', null)

+0

Le chiavi esterne non possono essere nulle – Rohan

+0

Possono essere 1 e l'acquirente 1 può essere un manichino. L'idea è che è un valore standard. –

2

Nel recente laravel versioni è possibile utilizzare whereColumn (docs):

$same = Market::whereColumn('seller_id', 'buyer_id')->get();