0

我是 phalcon 的新手,并且来自更多 Symfony 背景,我只需要知道如何在 phalcon 模型中定义外键之间的可选关系。

即用户表PK 是user_id,并且用户可能在照片表中有(可选)相关记录以具有主键photo_id 并由'user_id' 链接的照片。

所以在我的猎鹰模型中,如果有照片,我需要为用户加载照片。

在用户模型中

 public function initialize()
{
    $this->hasMany(
        "photo_id",
        "Photo",
        "photo_id",
        array(
            'alias' => 'photos'
        )
    );
}

在照片模型中,我将其写为

public function initialize()
{
    $this->belongTo(
        "user_id",
        "User",
        "user_id",
        array(
            'alias' => 'user'
        )
    );
}

在伏访问它通过

{{user.photo.photo_id}}

但这给了我错误

Undefined property: Phalcon\Mvc\Model\Resultset\Simple::$photo_id

任何的想法 ?

奇怪的是,如果在控制器中执行此代码它可以工作并让我获得照片模型,但当我尝试通过延迟加载访问它时却不行/

$users = User::find(array(
"limit" => 10)
);
echo "There are ", count($users), "\n";
foreach($users as $user){
$photos = Photo::find(array(
"user_id=:user_id:",
"limit" => 10,
"bind" => array("user_id" => $user->user_id)
)
);
if($photos->count()==0){
echo "<br />";
echo "No photo found for user".$user->user_id;
}
foreach($photos as $photo){
echo '<br />';
echo "User ->".$photo->user_id." Photo -> ".$photo->photo_id;
}
}

当我尝试像这样使用延迟加载时

foreach($users as $user){
    //echo $user->photos->photo_id;
    foreach($user->photos as $photo){
        echo '<br />';
        echo "User ->".$photo->user_id."  Photo -> ".$photo->photo_id;
    }
 }

我得到错误:

未定义的属性:Phalcon\Mvc\Model\Resultset\Simple::$photo_id

4

2 回答 2

2

使用$this->hasMany()关系时,您应该遍历所有记录:

{% for userPhoto in user.photo %}
    {{ userPhoto.photo_id }}
{% else %}
    User has no photos
{% endfor %}

还要检查模型名称(它必须与模型类名称相同):

$this->hasMany(
    "users_id",
    "Photos",
    "photo_id",
    array(
        "alias" => "photo"
    )
);

另外添加一个单数别名 forhasMany可能会造成混淆(以前版本的答案假定一对一的关系)所以我将此别名命名为"photos"not "photo"

另一方面如果User只能有一个Photo则使用$this->hasOne()

例子:

        $this->hasOne(
            'photo_id',
            'Photos',
            'id',
            array('alias' => 'photo')
        );

数据库结构:

Users: id, photo_id // other like name, email
Photos: id // other, like url, type, etc

然后您可以$this->photo->photo_id在数据库中有关联数据时使用。

那么最简单的解决方案是:

{% if user.photo %}{{ user.photo.photo_id }}{% endif %}

其次,错误:当使用hasMany关系 Phalcon 时,会为您提供搜索多个相关对象的结果(因此它是Phalcon\Mvc\Model\Resultset\Simple“搜索多个对象”的默认返回,例如Model::find())。

于 2014-10-07T06:48:48.310 回答
0

问题似乎是由我有两个如下所示的数据库连接引起的,这导致 DI 集中出现了一些问题。

return new \Phalcon\Config(array(
    'database'    => array(
        'adapter'  => 'Mysql',
        'host'     => 'localhost',
        'username' => 'root',
        'password' => '',
        'dbname'   => 'db_main',
        'name'   => 'db_main',
    ),

只需要保留一个名为“dbname”的数据库;

这就是我所做的一切

于 2014-10-14T01:35:36.143 回答