使用laravel从控制器中的数据库中进行选择

时间:2016-06-30 12:18:00

标签: php laravel-4

我尝试的东西非常简单但却无法奏效。我有一个控制器,从一个数据库中选择,以显示用户的一些信息。现在我尝试在同一个控制器中从第二个表中选择显示其他信息,但我得到Undefined variable...

这是控制器中存在问题的部分

   public function orderView( $orderId, $userId ) {

    $order = self::$user->orders()->where('order_id', $orderId)->first();
    $keys = Keys::all();

    if (!$order) {
        App::abort(404);
    }

    $userID         = $order['user_id'];
    $orderID        = $order['order_id'];
    $public_key     = $keys['public_key'];
    $private_key    = $keys['private_key'];                 

    $options = array(
            "public_key"  => $public_key,
            "private_key" => $private_key,             
            "orderID"     => $orderID,      
            "userID"      => $userID    
    );

我在这里添加的是

 $keys = Keys::all();
 $public_key        = $keys['public_key'];
 $private_key   = $keys['private_key'];
 ....
 "public_key"  => $public_key,
 "private_key" => $private_key,

错误为Undefined index: public_key

1 个答案:

答案 0 :(得分:2)

Keys::all()会返回Illuminate\Database\Eloquent\Collection

为了访问Collection的单个项目,您必须迭代集合并单独访问它们,或者使用Collection的函数专门使用一个项目,例如first()

例如:

public function orderView($orderId, $userId)
{
    $order = self::$user->orders()->where('order_id', $orderId)->first();
    $keys = Keys::all();

    if (! $order) {
        App::abort(404);
    }

    $options = [];

    foreach ($keys as $key)
    {
        $options[] = [
            'public_key'  => $key->public_key,
            'private_key' => $key->private_key,
            'userID'      => $order->user_id,
            'orderID'     => $order->order_id
        ];
    }

    return $options;
}

You can find more information about Illuminate Collection methods here.