0

LaravelのEloquentORMが関係のデータを返すようにするのに本当に問題があります。

私の移行(データベーススキーマ):

Schema::table('users', function($table)
{
    $table->engine = 'InnoDB';
    $table->create();

    $table->increments('id')->unsigned();
    $table->string('firstname');
    $table->string('surname');
    $table->string('email')->unique();
    $table->string('password')->unique();
    $table->string('phone')->nullable();
    $table->text('about')->nullable();
    $table->timestamps();
});

Schema::table('files', function($table)
{
    $table->engine = 'InnoDB';
    $table->create();

    $table->increments('id')->unsigned();
    $table->string('filename');
    $table->string('title');
    $table->text('description')->nullable();
    $table->string('keywords')->nullable();
    $table->integer('category_id')->unsigned();
    $table->integer('file_type_id')->unsigned();
    $table->integer('user_id')->unsigned();
    $table->timestamps();
});

モデル

File.php

<?php

class File extends Eloquent
{

    public static $timestamps = true;

    public function user()
    {
        return $this->belongs_to('User');
    }

}

User.php

<?php

class User extends Eloquent
{
    public static $timestamps = true;

    public function files()
    {
        return $this->has_many('File');
    }
}

ルート.php

// everything else in my routes.php is as it was when downloaded
Route::get('users', function()
{
    echo '<pre>';

    // this works
    $users = User::all();
    print_r($users);

    // this doesn't work
    print_r($users->files);

    // this doesn't work
    $files = User::find(1)->files;
    print_r($files);
});

エラー:

未処理の例外

メッセージ:

オブジェクト以外の場所のプロパティを取得しようとしています:

C:\ wamp \ www \ l3_mlib \ application \ routers.php、51行目スタックトレース:

#0 C:\ wamp \ www \ l3_mlib \ laravel \ laravel.php(42):Laravel \ Error :: native(8、'Pを取得しようとしています...'、'C:\ wamp \ www\l3_。。 。'、51)#1 C:\ wamp \ www \ l3_mlib \ application \ routers.php(51):Laravel {closure}(8、' try to get p ...'、' C:\ wamp \ www \ l3 _...'、51、Array)#2 [内部関数]:{closure}()#3 C:\ wamp \ www \ l3_mlib \ laravel \ routing \ route.php(163):call_user_func_array(Object(Closure) 、配列)#4 C:\ wamp \ www \ l3_mlib \ laravel \ routing \ route.php(124):Laravel \ Routing \ Route-> response()#5 C:\ wamp \ www \ l3_mlib \ laravel\laravel。 php(167):Laravel \ Routing \ Route-> call()#6 C:\ wamp \ www \ l3_mlib \ public \ index.php(34):require('C:\ wamp \ www \ l3 _...' )#7{メイン}

私は何が間違っているのですか?

4

2 に答える 2

4

LaravelクラスでもあるTaskというモデルでも同じ問題がありました。

application/config/application.php には、名前空間を削除するいくつかのクラス エイリアスがあります。ファイル エイリアスをコメント アウトすると、自分のエイリアスと競合しなくなります。

任意の時点で Laravel File クラスを使用する必要がある場合は、名前空間の名前を使用して参照できます。

Laravel\\File::get('path/to/file');

お役に立てれば、

ダン

于 2013-03-06T10:51:26.013 に答える
0

問題は移行スキーマにあると思います。外部キーを設定していないため、使用時にlaravelがオブジェクトデータを取得できません

 $files = User::find(1)->files;

そのため、エラーが返されます: オブジェクト以外の場所のプロパティを取得しようとしています

これをファイルの移行に追加して、機能するかどうかを確認します

 $table->integer('user_id')->unsigned()->unique('user_id', 'files_user_id');
 $table->foreign('user_id')->references('id')->on('users');

名前空間を使用して、クラス名の競合を回避できます

于 2013-07-05T11:04:35.450 に答える