0

テーブルからいくつかの値を取得しようとしていますがUnhandled exception: Trying to get property of non-object、Fluent によって返されたオブジェクトのプロパティとして結果にアクセスしようとするとエラーが発生しました。

問題:エラーがスローされても、オブジェクトのプロパティにアクセスしようとすると機能します。これは本当に不可解です。何が問題なのですか?

PHP コード

$sets = DB::table('sets')->where('user_id', '=', $user_id)->get();

// Get thumbnail of latest item added to set
foreach($sets as $set) {
    $post_set = DB::table('posts_sets')
                ->where('set_id', '=', $set->id)
                ->order_by('created_at', 'desc')
                ->first();
    print_r($post_set);  // works fine
    echo $post_set->id;  // prints out value, BUT throws the unhandled exception error!
}

エラー

未処理の例外

メッセージ:

非オブジェクトのプロパティを取得しようとしています

位置:

/home/test/public_html/application/controllers/api.php 行 47

スタックトレース:

#0 /home/test/public_html/laravel/laravel.php(40): Laravel\Error::native(8, 'p を取得しようとしています...', '/home/test/pub...', 47 )
        #1 /home/test/public_html/application/controllers/api.php(47): Laravel{closure}(8, 'p を取得しようとしています...', '/home/test/pub...', 47 、 配列)
        #2 [内部関数]: Api_Controller->action_sets()
        #3 /home/test/public_html/laravel/routing/controller.php(323): call_user_func_array(配列, 配列)
        #4 /home/test/public_html/laravel/routing/controller.php(283): Laravel\Routing\Controller->response('sets', Array)
        #5 /home/test/public_html/laravel/routing/controller.php(165): Laravel\Routing\Controller->execute('sets', Array)
        #6 /home/test/public_html/laravel/routing/route.php(153): Laravel\Routing\Controller::call('api@(:1)', Array)
        #7 /home/test/public_html/laravel/routing/route.php(124): Laravel\Routing\Route->response()
        #8 /home/test/public_html/laravel/laravel.php(125): Laravel\Routing\Route->call()
        #9 /home/test/public_html/public/index.php(34): require('/home/test/pub...')
        #10 {メイン}

4

2 に答える 2

2

まず、データベースから利用可能なデータレコードがない場合、$ post_setクエリはNULLを返します。つまり、常に最初にis_null($ post_set)をチェックする必要があります。

于 2012-07-24T14:21:17.570 に答える
0

そのためには eloquent を使用する必要があります。

foreach 内でクエリを実行していることに注意してください。データベースが大きくなると、パフォーマンスの問題が発生します。

雄弁を使用すると、次のように熱心な読み込みを使用できます。

$sets = Set::with('posts')->where_user_id($user_id)->get();

foreach($sets as $set)
{
var_dump($set);
var_dump($set->posts);
}

詳細はhttp://laravel.com/docs/database/eloquentで確認できます

于 2013-02-19T18:08:36.240 に答える