我在让 Laravel 的 Eloquent ORM 返回关系数据时遇到了真正的问题。
我的迁移(数据库模式):
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();
});
楷模
文件.php
<?php
class File extends Eloquent
{
public static $timestamps = true;
public function user()
{
return $this->belongs_to('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\routes.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\routes.php(51): Laravel{closure}(8, '试图获取 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 {主要}
我究竟做错了什么?