Laravel 关系 Query/Find - 尝试获取非对象的 属性

Laravel Relation Query/Find - Trying to get property of non-object

我尝试将类别关联到交易时无法修复此错误。

// 事务控制器

$transactions = DB::table('transactions')
        ->where('status', 'false')
        ->orderBy('date','asc')
        ->get();        

        foreach($transactions as $data) {
            $transaction = new Transaction();
            $transaction->id = $data->id;
            $transaction->category = Transaction::find($data->categories_id)->category;
            $transaction->description = $data->description;
    }

错误发生时间: TransactionController.php 第 80 行中的错误异常: 尝试获取 属性 的非对象

Line 80: $transaction->category = Transaction::find($data->categories_id)->category;

但是,如果我用 die 测试我的代码,结果是:

die(Transaction::find($data->categories_id)->category()->first());

{"id":1,"users_id":1,"description":"Alimenta\u00e7\u00e3o","created_at":"2016-11-15 20:31:11","updated_at":"2016-11-15 20:31:11"}

// 交易模型

class Transaction extends Model
{
    public function category(){
        return $this->hasOne('App\Category','id');
    }  

[]的

您收到该错误,因为一个或多个 $data->categories_idtransactions table 上的 id 不匹配。

注: find 模型并在与您所做的相同的行上调用函数不是一个好习惯。

Transaction::find($data->categories_id)->category;

因为,你永远不知道 id 会作为参数传递给 find()。 最好选择 findOrFail().

$tran = Transaction::findOrFail($data->categories_id);

$cat = $tran->category;

每当 idtransactions table 中不匹配时,findOrFail() 函数将抛出 ModelNotFoundExceptiontry...catch 块可以轻松处理此异常。