Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Assign Column Names to the Laravel paginate() Method

I have this in my Contact model:

public static function contacts($perPage = 10)
{
    $order_type = '.desc';
    $order = Session::get('contact.order', 'first_name' . $order_type); // Set the default order to created_at DESC
    $order = explode('.', $order);

    $columns = array(
        'contacts.id as id',
        'contacts.first_name as first_name',
        'contacts.last_name as last_name',
        'contacts.telephone_number as telephone_number',
        'contacts.email as email',
        'accounts.company_name as account',
        'users.first_name as am_first_name',
        'users.last_name as am_last_name'
    );

    $contacts = DB::table('contacts')
        ->leftJoin('accounts', 'account_id', '=', 'accounts.id')
        ->leftJoin('account_managers', 'accounts.account_manager_id', '=', 'account_managers.id')
        ->leftJoin('users', 'user_id', '=', 'users.id')
        ->orderBy($order[0], $order[1])
        ->paginate($perPage, $columns);

    return $contacts;
}

It's not assigning my 'as' statement to the columns I want, which means I'm getting 'Column first_name is ambiguous.

Can you not do this with the Paginate method?

Cheers

like image 652
Gareth Daine Avatar asked Jan 26 '26 13:01

Gareth Daine


1 Answers

You need to use select($columns)...

$contacts = DB::table('contacts')
    ->select($columns)
    // other bits
    ->paginate($perPage);

As mentioned under Specifying A Select Clause

like image 72
Phill Sparks Avatar answered Jan 29 '26 12:01

Phill Sparks



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!