如何只使用laravel 5.1从数据库中选择2列?

时间:2015-07-23 21:48:23

标签: php mysql laravel laravel-5

我正在尝试使用laravel 5.1从MySQL数据库中选择记录并将结果分解为页面。

这是我用于将数据库结果返回到listall视图的方法。 (此代码显示白屏"没有错误,没有结果")

public function getIndex(){

    $accounts = DB::table('accounts')
                    ->lists('account_id','account_name')
                    ->where('client_id', '=', 7)
                    ->paginate(100);

    $name = 'Mike A';

    return view('accounts.listall', compact('accounts', 'name'));

}

使用下面的代码时,它可以正常工作但返回所有列。我只想显示2列。

public function getIndex(){

    $accounts = DB::table('accounts')
                    ->where('client_id', '=', 7)
                    ->paginate(100);

    $name = 'Mike A';

    return view('accounts.listall', compact('accounts', 'name'));

}

EDITED

这是我在Kyle Suggestion"以下"

之后的代码
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
use App\Accounts;

class AccountsController extends Controller
{

    public function getIndex(){

        $accounts = Accounts::select('account_id', 'account_name')
                    ->where('client_id', '=', 7)
                    ->paginate(100);


        $name = 'Mike A';

        return view('accounts.listall', compact('accounts', 'name'));

    }

    public function getAccounts($id){

        return view('accounts.account')->withName('Mike A');
    }
}

这是我的帐户模型

namespace App;

use Illuminate\Database\Eloquent\Model;

class Accounts extends Model
{

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'accounts';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['account_id', 'account_name', 'company_code'];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = [];
}

但我仍然得到一个白色的屏幕

2 个答案:

答案 0 :(得分:1)

首先,您不应该使用DB::table('accounts')。您应该使用Account::all()。我想这只是语法。

我假设你有一个名为accounts的表,该表有2列account_idaccount_name。话虽这么说,你的全班应该看起来像这样:

<?php namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

use App\Account; //don't forget this so you can use it below

class AccountController extends Controller {

    public function getIndex() {
        $accounts = Account::select('account_id', 'account_name')
                    ->where('client_id', '=', 7)
                    ->paginate(100);

        $name = 'Mike A';

        return view('accounts.listall', compact('accounts', 'name'));
    }

这就是你需要的吗?

答案 1 :(得分:0)

Laravel Query Builder docs中,请参阅“指定选择子句”。要执行您要执行的操作,您需要使用select方法而不是您正在使用的lists方法。

select方法允许您从表中指定所需的列,并返回$this(查询生成器实例),以便您可以使用更多的查询生成器方法链接它,就像您正在做的那样使用wherepaginate

lists方法返回一个数组(参见“检索列值列表”下的文档)。返回的数组不具有wherepaginate方法。这就是目前正在杀死你的脚本并为你提供白屏的内容。

lists方法应该是查询构建器方法链中调用的最后一个方法。与getpaginate一样,它旨在以特定方式返回查询结果。