【问题标题】:How to only select 2 column from the database with laravel 5.1?如何使用 laravel 5.1 从数据库中仅选择 2 列?
【发布时间】:2015-07-23 21:48:23
【问题描述】:

我正在尝试使用 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'));

}

已编辑

这是我在 Kyle Suggestion "below" 之后的代码

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 = [];
}

但我仍然得到一个白屏

【问题讨论】:

  • select代替lists

标签: php mysql laravel laravel-5


【解决方案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'));
    }

这是你需要的吗?

【讨论】:

  • 感谢您的回答。什么是 App\Account 类?它应该是什么样子?
  • app\Account.php 文件将是一个模型。如果你想要一个例子,它类似于app\User.php。它定义了表格和可填写字段,您不必直接处理表格。
  • 谢谢。我仍然得到一个空白的白屏
  • 空白屏幕通常意味着 php.ini 配置存在问题。您的内存限制可能设置得太低。如果您能找到您的 php 日志文件,它可能会为您提供更多信息。如果您没有看到典型的 laravel 错误屏幕......它可能不是 laravel。
  • 页面运行得非常快,我怀疑这会是内存限制。 laravel 的某个地方有错误日志文件吗?
【解决方案2】:

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

select 方法允许您指定要从表中获取哪些列,并返回 $this(查询生成器实例),以便您可以像使用 where 一样将其与更多查询生成器方法链接起来和paginate

lists 方法返回一个数组(请参阅“检索列值列表”下的文档)。返回的数组将没有 wherepaginate 方法。这就是当前正在杀死您的脚本并给您白屏的原因。

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

【讨论】:

  • 我曾尝试使用凯尔在回答中提到的选择列表。但我仍然得到一个白页。知道我做错了什么吗?我会用凯尔的建议更新我的问题
  • 使用查询构建器调用无效方法仍会显示 laravel 堆栈跟踪。不是白屏死机。
  • @Kyle 真的,好点。根据给出的信息,令人惊讶的是 Laravel 错误页面没有出现。不过,这些方法在那个时候似乎不是无效的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-06
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多