小编Evr*_*sen的帖子

为什么 eloquent 模型关系不使用括号,它们是如何工作的?

我一直在网上搜索一个小时,但无法弄清楚。如果我们查看 eloquent 关系文档:https : //laravel.com/docs/5.2/eloquent-relationships

示例用户模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * Get the phone record associated with the user.
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}
Run Code Online (Sandbox Code Playgroud)

在它的正下方,如何访问 id=1 的用户的电话号码:

$phone = User::find(1)->phone;
Run Code Online (Sandbox Code Playgroud)

为什么是phone和不是phone(),有什么区别?

还有它是如何工作的?如果我尝试object->name在我的代码中调用不带括号的 ,PHP 认为我正在寻找一个名为name?

一些额外的信息:

看起来手机正在返回对象(App\Models\Phone)和手机()正在返回对象(Illuminate\Database\Eloquent\Relations\HasOne)

如果我运行下面的代码:

User::find(1)->phone->count()
Run Code Online (Sandbox Code Playgroud)

框架执行以下 SQL 语句:

select * from `phone` where `phone`.`user_id` = '1' and `phone`.`user_id` is not null limit 1
select count(*) as aggregate …
Run Code Online (Sandbox Code Playgroud)

php methods function object eloquent

6
推荐指数
2
解决办法
1641
查看次数

Laravel 5.2 Auth门面和Auth :: guard($ guard)

我是Laravel的新手.我正在浏览默认的身份验证中间件,我发现它正在使用:

Auth::guard($guard)->guest()
Run Code Online (Sandbox Code Playgroud)

检查用户是否是来宾.

https://laravel.com/docs/5.2/authentication#retrieving-the-authenticated-user上的文档告诉我们可以使用:

Auth::check()
Run Code Online (Sandbox Code Playgroud)

确定用户是否经过身份验证.(我想这是客人()的对面吗?

我尝试更改要使用的默认代码

Auth::guest()
Run Code Online (Sandbox Code Playgroud)

而且我得到了完全相同的结果.

我的问题是,在这种情况下,保护($ guard) - >之间有什么区别?

一个相关的问题.guest()是否与check()完全相反,或者是否存在可能返回相同结果的情况?

谢谢!

php authentication laravel

5
推荐指数
1
解决办法
2万
查看次数

Sonata Admin 在列表视图中修改数据

我正在尝试显示/编辑 postgis 点类型。我使用的creof/doctrine2-spatial包提供了一些简洁的函数来获取一个点的 X 和 Y 值。以下在编辑/新形式下工作正常,因此该点被列为“YX”(在本例中为“纬度经度”)。

我不确定这是否是完成我需要的正确方法,但它有效。

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('name', 'text')
        ->add('coords', 'text', array(
            'data'=>
                $this->getSubject()->getCoords()->getLatitude() . ' ' .
                $this->getSubject()->getCoords()->getLongitude()
        ));
}
Run Code Online (Sandbox Code Playgroud)

然而问题是列表视图。因为点被转换为字符串,因为"X Y"它在列表视图中以错误的顺序打印纬度和经度。它打印为“经度纬度”我对奏鸣曲很陌生,所以我不确定如何在列表视图中解决这个问题。

有任何想法吗?

更新:感谢@kunicmarko20 我已经解决了这个问题:

所以文件去了app/Resources/views/SonataAdmin/CRUD/geography_point_list.html.twig 我决定把文件放到一个合理的文件夹中。

模板内容为:

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

{% block field %}
    <div>
        {{ object.coords.getLatitude }} {{ object.coords.getLongitude }}
    </div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

使用模板的代码是:

->add('coords', null, ['template' => 'SonataAdmin/CRUD/geography_point_list.html.twig']);
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我无法使用:类型路径?

symfony form-fields sonata-admin

2
推荐指数
1
解决办法
1881
查看次数