Shariffuddin Hussin
Shariffuddin Hussin

Reputation: 113

Concate and produce null

I try to make an exception for my function where is address is null, it did not have to print out the null value.

Here is my function:

if (UserAddress::where('address_2', '=', 'null')) {
                $a = UserAddress::select("*", DB::raw("CONCAT(user_addresses.address_1,' ',user_addresses.address_2,' ',user_addresses.city,' ' ,user_addresses.postcode,' ',user_addresses.state)  as full_address"))->pluck('full_address');
            }else{
                $a = UserAddress::select("*", DB::raw("CONCAT(user_addresses.address_1,' ',user_addresses.address_2,' ',user_addresses.city,' ' ,user_addresses.postcode,' ',user_addresses.state)  as full_address"))->pluck('full_address');
            }

When I die dump $a, the first produce null query.

Upvotes: 0

Views: 400

Answers (2)

Shariffuddin Hussin
Shariffuddin Hussin

Reputation: 113

I solve it. Use empty string with CONCAT_WS

DB::raw("CONCAT_WS('',user_addresses.address_1,...

Upvotes: 0

Andrew
Andrew

Reputation: 1833

You cannot use arithmetic comparison operators such as =, <, or <> to test for NULL.

Instead of where('address_2', '=', 'null'), try using the whereNull() function like so:

if (UserAddress::whereNull('address_2')) {
                $a = UserAddress::select("*", DB::raw("CONCAT(user_addresses.address_1,' ',user_addresses.address_2,' ',user_addresses.city,' ' ,user_addresses.postcode,' ',user_addresses.state)  as full_address"))->pluck('full_address');
            }else{
                $a = UserAddress::select("*", DB::raw("CONCAT(user_addresses.address_1,' ',user_addresses.address_2,' ',user_addresses.city,' ' ,user_addresses.postcode,' ',user_addresses.state)  as full_address"))->pluck('full_address');
            }

It can help to enable the query log to see what exactly you are querying on the database, then you can run it directly via phpmyadmin (or whatever you are using). Place DB::enableQueryLog(); before you query, and //dd(DB::getQueryLog()) after the query is executed for troubleshooting.

Upvotes: 1

Related Questions