如何比`$ collection [0] - > object`更好地访问`object`数据

时间:2016-01-03 22:49:20

标签: php mysql pdo eloquent laravel-5.1

我是PDO PHP的新手,我确信我没有以有效的方式编写它。我一直在努力研究如何从object中获取collection数据,而我这样做的方式很难看。

例如,我有两个表work_ordersaircraft。我希望通过使用我aircraft表中的aircraft_id字段,从work_orders表格获得飞机注册。

以下是我在控制器中的内容:

// Temporary injection
$order_number = '502';

// Get the aircraft_id that corresponds to the work order supplied
$aircraft_id = $workorder->select('aircraft_id')
                            ->where('id', $order_number)
                            ->get();

// Assigned the aircraft_id to a variable
$aircraft_id = $aircraft_id[0]->aircraft_id;

// Use the aircraft_id to find get the aircraft data
$aircraft = $aircraft->findOrFail($aircraft_id);

我意识到这已经写了join(),我确实加入了它,但是我试图解决我的问题来到这里......如果这是有道理的。

我一直想要的部分是我想要只需输入$aircraft_id->aircraft_id,我最终会碰到同一堵墙。

有没有更好的方法来构建我的查询,还是这就是它的方式?

修改

我的WorkOrder型号:

public function aircraft()
{
    return $this->belongsTo(Aircraft::class);
}

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码而不是整个代码:

// Temporary injection
$order_number = '502';

// Use the aircraft_id to find get the aircraft data
$aircraft = $aircraft->findOrFail($workorder->select('aircraft_id')->findOrFail($order_number)->aircraft_id);

而不是:

->where('id', $order_number)->get();

你可以在这里使用

->find($order_number)(或更好->findOrFail($order_number)以确保记录存在且您不会对null采取任何操作) - 它只会使用给定ID的第一条记录。

现在您只需访问属性aircraft_id即可