【发布时间】:2014-09-12 01:55:17
【问题描述】:
我正在尝试通过将一个用 php 编写的应用程序迁移到 Laravel 来熟悉 Laravel 和 MVC 结构。
我已经设置了一个控制器 UserController.php:
<?php
class UserController extends BaseController{
public function showUsers(){
// Display all SQL executed in Eloquent
Event::listen('illuminate.query', function($query)
{
var_dump($query);
});
$users = User::all();
return View::make('users')->with('users', $users);
}
}
模型用户.php:
<?php
class User extends Eloquent {
protected $table = 'users';
public $timestamps = false;
public function ip()
{
return $this->hasOne('IP', 'user');
}
}
和模型IP.php
<?php
class IP extends Eloquent {
protected $table = 'ips';
public $timestamps = false;
public function user()
{
return $this->belongsTo('User');
}
}
在我的视图 users.blade.php 中,我以表格格式显示所有用户的选择信息,例如:
<tbody>
@foreach($users as $user)
<tr>
<td>{{ $user->id }}</td>
<td>{{{ $user->lname . ',' . $user->fname }}}</td>
<td>{{{ $user->ip }}}</td>
</tr>
@endforeach
</tbody>
当这样执行时,我会得到 IP 地址的数组响应,例如:
{"id":"257","ip_addr":"167772675","network":"2","user":"00002","router":null,"used":"1"}
为该行显示的用户的正确信息是什么。 如果我尝试通过以下方式获取所需的 IP 地址:
{{{ $user->ip->ip_addr }}}
我收到以下错误: 错误异常 (E_UNKNOWN) 试图获取非对象的属性
数据库架构如下: 表用户:
+---------+-------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------------------------+------+-----+---------+----------------+
| id | smallint(5) unsigned zerofill | NO | PRI | NULL | auto_increment |
| fname | varchar(30) | NO | | NULL | |
| lname | varchar(30) | NO | | NULL | |
| bname | varchar(40) | NO | | NULL | |
| addr1 | varchar(50) | NO | | NULL | |
| addr2 | varchar(50) | NO | | NULL | |
| city | varchar(50) | NO | | NULL | |
| state | varchar(2) | NO | | NULL | |
| zip | varchar(5) | NO | | NULL | |
| email | varchar(254) | NO | | NULL | |
| phone1 | varchar(12) | NO | | NULL | |
| phone2 | varchar(12) | NO | | NULL | |
| idate | date | YES | | NULL | |
| tdate | date | YES | | NULL | |
| ptype | int(11) | YES | | NULL | |
| maddr | varchar(12) | NO | | NULL | |
| antenna | int(11) | YES | MUL | NULL | |
| notes | text | NO | | NULL | |
| service | int(11) | YES | MUL | NULL | |
| company | int(11) | NO | | 0 | |
| active | tinyint(1) | NO | | 1 | |
| blocked | tinyint(1) | NO | | 0 | |
+---------+-------------------------------+------+-----+---------+----------------+
和表 ips:
+---------+-------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| ip_addr | int(10) unsigned | NO | UNI | NULL | |
| network | int(11) | YES | MUL | NULL | |
| user_id | smallint(5) unsigned zerofill | YES | MUL | NULL | |
| router | int(11) | YES | MUL | NULL | |
| used | tinyint(1) | NO | | NULL | |
+---------+-------------------------------+------+-----+---------+----------------+
我在语法上尝试了各种各样的变化,但我现在只是在踩水。 感谢收看!
【问题讨论】:
-
你的意思是
{{{ $user->ip()->ip_addr }}}? -
@fakemeta 这不是问题,Eloquent 将这些关系转换为模型对象的属性。 @Tom 我相信您的用户关系中存在大写错误,您与
IP相关,但课程是Ip -
将 () 添加到 ip 会返回以下错误:ErrorException (E_UNKNOWN) Undefined property: Illuminate\Database\Eloquent\Relations\HasOne::$ip_addr
-
@watcher OOps 确实做到了,这是使用 Ip 而不是 IP 或 ip 进行测试的残余。我已经纠正了它,但问题仍然存在。我也会在这里调整它。谢谢!
-
问题是不是每个用户都有相关的
ip,所以你在foreach循环中从$user->ip得到null。您需要在访问其属性之前检查关系是否存在。