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

时间:2016-11-17 02:37:14

标签: php laravel find relation

当我尝试将类别关联到事务时,我无法修复此错误。

// TransactionController

$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行中的ErrorException: 试图获得非对象的属性

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');
    }  

[]的

1 个答案:

答案 0 :(得分:0)

由于一个或多个$data->categories_idid表格上的transactions不匹配,您收到该错误。

注意: find一个模型并在一个函数上调用函数并不是一个好习惯。

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

因为,您永远不知道将id作为find()的参数传递给什么。 最好选择findOrFail()

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

$cat = $tran->category;

只要findOrFail()表中ModelNotFoundException不匹配,id函数就会抛出transactionstry...catch阻止可以轻松处理此异常。