laravel app 函数y拥有某个属性用什么函数

I am trying to access data from a query that I have placed within a function in a model.
I am trying to call the function within a controller, and then send along that data to a view.
So far, I have been unsuccessful.
Here is the code:
Model: Fanartist.php
public function fan_likes() {
$fan_likes = DB::table('fanartists')
-&join('artists', 'fanartists.fan_id', '=', 'artists.id')
-&where('fanartists.fan_id', '=', Auth::user()-&id)
-&select('artists.id', 'artists.stage_name', 'artists.city', 'artists.state', 'artists.image_path', 'artists.description');
Controller: FansController.php
public function getHome() {
return View::make('fans.home')
-&with('fans', Fan::all())
-&with('fanartists', Fanartist::fan_likes());
@foreach($fanartists as $fanartist)
{{$fanartist}}
@endforeach
When I run this, I get the error:
Non-static method Fanartist::fan_likes() should not be called statically, assuming $this from incompatible context
Thank you for your help and suggestions.
New error.
I am returning the view, but now, trying to run this:
@foreach($fanartists as $fanartist)
{{$fanartist-&artists.id}}
@endforeach
I get the error:
log.ERROR: exception 'ErrorException' with message 'Trying to get property of non-object' in /Applications/MAMP/htdocs/crowdsets/laravel-master/app/storage/views/2ed7fc8952dab08cf4cb4f4e3d40d1ab:100
@foreach($fanartists as $fanartist)
&?php var_dump($fanartist); ?&
@endforeach
I get the following output:
NULL array(6) { [0]=& string(10) "artists.id" [1]=& string(18) "artists.stage_name" [2]=& string(12) "artists.city" [3]=& string(13) "artists.state" [4]=& string(18) "artists.image_path" [5]=& string(19) "artists.description" } bool(false) string(10) "fanartists" array(1) { [0]=& object(Illuminate\Database\Query\JoinClause)#201 (3) { ["type"]=& string(5) "inner" ["table"]=& string(7) "artists" ["clauses"]=& array(1) { [0]=& array(4) { ["first"]=& string(17) "fanartists.fan_id" ["operator"]=& string(1) "=" ["second"]=& string(10) "artists.id" ["boolean"]=& string(3) "and" } } } } array(1) { [0]=& array(5) { ["type"]=& string(5) "Basic" ["column"]=& string(17) "fanartists.fan_id" ["operator"]=& string(1) "=" ["value"]=& string(1) "1" ["boolean"]=& string(3) "and" } } NULL NULL NULL NULL NULL NULL
解决方案 Fanartist::fan_likes() is not supposed to be called statically, but if you want to call it statically then change your fan_likes function to static.
for your example
public static function fan_likes() {
$fan_likes = DB::table('fanartists')
-&join('artists', 'fanartists.fan_id', '=', 'artists.id')
-&where('fanartists.fan_id', '=', Auth::user()-&id)
-&select('artists.id', 'artists.stage_name', 'artists.city', 'artists.state', 'artists.image_path', 'artists.description');
return $fan_
本文地址: &
我试图从模型中的函数中查询的查询中访问数据。我试图调用控制器内的函数,然后将数据发送到视图。到目前为止,我一直没有成功。以下是代码:
模型:Fanartist.php
function fan_likes(){ $ fan_likes = DB :: table('fanartists')
- & join('artists','fanartists.fan_id','=','artists.id')
- & where('fanartists.fan_id','=',Auth :: user() - & id)
- & select('artists.id','artists.stage_name' ,'artists.city','artists.state','artists.image_path','artists.description');
控制器:FansController.php
public function getHome(){ return View :: make('fans.home')
- & with ',Fan :: all())
- & with('fanartists',Fanartist :: fan_likes());
@foreach($ fanartists as $ fanartist)
{{$ fanartist}}
@endforeach
当我运行这个,我得到的错误:
非静态方法Fanartist :: fan_likes()不应静态调用,假设$ this来自不兼容的上下文
感谢您的帮助和建议。
新错误。我现在回来了,但现在,尝试运行这个:
@foreach($ fanartists as $ fanartist) {{$ fanartist-& artists.id}}
@endforeach
我得到错误:
log.ERROR:异常'ErrorException'消息'尝试获取非对象的属性'在/ Applications / MAMP / htdocs / crowdsets / laravel-master / app / storage / views / 2ed7fc8952dab08cf4cb4f4e3d40d1ab:100
UPDATE 2:
@foreach($ fanartists as $ fanartist)&?php var_dump($ fanartist); ?&
@endforeach
我得到以下输出:
NULL数组(6){[0] =& string(10)“artists.id”[1] =& string(18)“artists.stage_name”[2] =& string(12)“artists.city”[3] =& string(13)“artists.state”[4] =& string(18)“artists.image_path”[5] =& string(19)“artists.description”} bool(false)string(10)“fanartists”array(1){[0] =& object(Illuminate \Database \Query \JoinClause)#201(3){[“type”] =& string(5)“inner”[“table”] =& string(7)“artists”[“clauses”] =& array(1){[0] =& array(4){[“first”] =& string(17)“fanartists.fan_id”[“operator”] =& string(1)“=”[“second”] =& string(10)“artists.id”[“boolean”] =& string(3)“和”}}}} array(1){[0] =& array(5){[“type”] =& string(5)“Basic”[“column”] =& string(17)“fanartists.fan_id”[“operator”] =& string(1)“=”[“value”] =& string(1)“1”[“boolean”] =& string(3)“和”}} NULL NULL NULL NULL NULL
Fanartist :: fan_likes()不应该被静态调用,但如果你想静态调用它,然后将你的fan_likes函数更改为静态。
for your example
public static function fan_likes(){ $ fan_likes = DB :: table 'fanartists')
- & join('artists','fanartists.fan_id','=','artists.id')
- & where('fanartists.fan_id',' ',Auth :: user() - & id)
- & select('artists.id','artists.stage_name','artists.city','artists.state','artists.image_path ','artists.description');
return $ fan_ }
本文地址: &
扫一扫关注官方微信Laravel模型中的动态属性 - 简书
Laravel模型中的动态属性
Laravel的文档里对于Model的动态属性讲的比较简略,理解起来有些模糊,最近在伟大的虾米的带领下终于搞明白了,在此做一个比较详细的总结。
首先上。一对一关联是很基本的关联。例如一个User模型也许会对应一个Phone。要定义这种关联,我们必须将phone方法放置于User模型上。phone方法应该要返回基类Eloquent上的hasOne方法的结果:
&?phpnamespace A
use Illuminate\Database\Eloquent\M
class User extends Model
* 获取与指定用户互相关联的电话纪录。
public function phone() {
return $this-&hasOne('App\Phone');
传到hasOne方法里的第一个参数是关联模型的类名称。定义好关联之后,我们就可以使用Eloquent的动态属性来获取关联纪录。动态属性让你能够访问关联函数,就像他们是在模型中定义的属性:
$phone = User::find(1)-&
但这里只讲了动态属性的最简单的一种形式,也就是调用的属性不存在,但存在同名的方法时,则会调用同名的方法,返回的类型是。下文让我们走一遍Laravel的源代码看看还有其他几种不同种类的动态属性。
二、Laravel源代码trace
1、对于动态属性疑问的产生
虾米在梅林项目的blade里用到了一个方法,但是user的model里并不存在同名的avatar_src()方法,但是存在一个getAvatarSrcAttribute()名字有点像的方法,当时就觉得很懵逼,看代码的确是调用了这个方法,但不知是如何关联起来的,所以想搞明白这里面的逻辑究竟是怎么回事。
&a href="#"&&img src="{{ Auth::user()-&avatar_src }}" alt=""&&/a&
2、__get()
那么问题来了,如何追溯?这里需要的一个预备知识是关于PHP的魔术方法,当读取不可访问属性的值时,__get()会被调用。所以决定从这个方法开始进行追溯。具体的方法是在PhpStorm里打开user模型的代码,在菜单栏选择Navigate-File Structure,弹出的框子里勾选Show inherited members,英文输入状态下输入get可以找到我们想要的方法,点进去可以看到__get()方法源代码如下:
* Dynamically retrieve attributes on the model.
* @return mixed
public function __get($key)
return $this-&getAttribute($key);
3、getAttribute($key)
* Get an attribute from the model.
* @return mixed
public function getAttribute($key)
if (array_key_exists($key, $this-&attributes) || $this-&hasGetMutator($key)) {
return $this-&getAttributeValue($key);
return $this-&getRelationValue($key);
第一个if的左半边,如果这个model有这个attribute那么就直接返回,没什么可说的。
第一个if的右半边mutator是变异体的意思事实上处理了本节开头的疑问,看一下源代码:
* Determine if a get mutator exists for an attribute.
* @return bool
public function hasGetMutator($key)
return method_exists($this, 'get'.Str::studly($key).'Attribute');
本方法的作用是判断所调用的这个不存在的属性是否存在“按照一定格式变形的类似名字的方法”。所谓的“一定格式”可以参考,对应的源代码:
* Convert a value to studly caps case.
* @return string
public static function studly($value)
if (isset(static::$studlyCache[$key])) {
return static::$studlyCache[$key];
$value = ucwords(str_replace(['-', '_'], ' ', $value));
return static::$studlyCache[$key] = str_replace(' ', '', $value);
注意到经studly caps处理过的-和_都会被去掉。再回到hasGetMutator($key)这个方法,我们可以看到Laravel会尝试去寻找名字形似getStudlyCapsNameAttribute()的方法,如果有的话则会在getAttribute($key)里返回相关的值。第一小节提到的例子对应的方法名我们可以知道当调用这个不存在的属性avatar_src时,Laravel会尝试调用getAvatarSrcAttribute()这个方法,看了下代码果然是存在这个方法的,开始的疑问解决啦~
4、getRelationValue($key)
回到getAttribute($key)这个方法,如果在第一个if里没有返回则会调用getRelationValue($key)这个方法,源代码如下:
* Get a relationship.
* @return mixed
public function getRelationValue($key)
// If the key already exists in the relationships array, it just means the
// relationship has already been loaded, so we'll just return it out of
// here because there is no need to query within the relations twice.
if ($this-&relationLoaded($key)) {
return $this-&relations[$key];
// If the "attribute" exists as a method on the model, we will just assume
// it is a relationship and will load and return results from the query
// and hydrate the relationship's value on the "relationships" array.
if (method_exists($this, $key)) {
return $this-&getRelationshipFromMethod($key);
第一个if注释写得很清楚了,第二个if就是判断是否存在和所调用属性同名的方法,如果存在则调用getRelationshipFromMethod($key)方法。
5、getRelationshipFromMethod($method)
这个方法比较关键,我们看一下源代码:
* Get a relationship value from a method.
* @return mixed
* @throws \LogicException
protected function getRelationshipFromMethod($method)
$relations = $this-&$method();
if (! $relations instanceof Relation) {
throw new LogicException('Relationship method must return an object of type '
.'Illuminate\Database\Eloquent\Relations\Relation');
$this-&setRelation($method, $results = $relations-&getResults());
注意if语句块那里的判断,意味着与属性同名的方法的返回类型必须是Relation类型或者是它的子类,例如hasMany等。所以如果要另外做处理,返回的类型不为Relation的话可以参考第四小节那样的命名法构造相关方法名。另外,setRelation那一行的意思是将没有加载的relation进行加载,那么下次需要时就可以在getRelationValue($key)的第一个if中即返回需要的结果。还有值得注意的是此方法最后的返回值返回的$results是Collection类型,也就是说如果调用不存在的动态属性后返回的是Collection类型,而如果我们直接调用方法返回的则是Relation类型,可以在其上构造查询进一步处理,而再调用getResults()后才能再获得Collection类型的返回值。
一个文盲、一个迷妹
1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法。 1、一个&.java&源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个publ...
百战程序员_ Java1573题 QQ群:034603 掌握80%年薪20万掌握50%年薪10万 全程项目穿插, 从易到难,含17个项目视频和资料持续更新,请关注 国内最牛七星级团队马士兵、高淇等11位十年开发经验专...
国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿: 前言: 排版 by Dr_Ting公众号:庭说移步 tingtalk.me 获得更友好的阅读体验 Q/GDW XXXX-201X《面向对象的用电信息数据交换协议》是根据《国家...
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
近一年内陆续面试了不少人了,从面试者到面试官的转变让我对 iOS 招聘有了更多的感受。经过了前段时间的一大波面试,我们终于找到了志同道合的小伙伴,面试也暂时告一段落了。总结下面试人过程中的感受,你也可以读到我们对简历、算法、性格、iOS 基础、底层知识的看法和一些常问的面试...
PS:这是一个小白的学习记录之路。大神看见不要笑,狮虎看见不要生气的哈。 题目:单例模式的实现方式 解决思路:狮虎说不知道就要问度娘(PS:狮虎,不要打了,疼···我真的不知道单例) 解决步骤:狮虎说不知道就要多学习(PS:我认真的抄了一遍,狮虎,我真的很认真的抄了~) 答...
“民以食为天”,不少老板认为餐饮行业的盈利高,纷纷投资大搞特色餐馆,豪华装修、高档服务,想必会旗开得胜、客似云来。因此,易从网表示饭店装饰还需要借助风水画布局,好的风水画布局就如东风,不但可以旺财,还可以提高食客满意度。一个增加财运的饭店适合挂哪些风水字画呢? 适合饭店挂的...
我也不记得我到底是因为什么才在小学开始学了一门乐器。 那时候学校似乎是有兴趣爱好班的,是否是在某个昏暗的下午,领着老师发下来的表,望着密密麻麻的选项无从下手,回家交给妈妈做的决定?我是真的不记得了。而我对小提琴的记忆只存留在几件事上。我还记得学校小提琴班的老师好像是为上了年...
装个逼,s7 edge就是牛逼。顺便问一下同志们都贴膜么。。。感觉贴膜很没有手感
今天的玛雅印记是我的本我图腾,刚好也是玛雅历的情人节,一个人在几乎包场的电影院看了一部关于时空穿梭的电影。已经不记得是第几次了,每次都觉得意外的包场很爽。或许在某个平行时空里,也有一个人陪着我一起看吧。 少年与少女在时空之间不断地穿越,因此,少年变得时而神经大条时而温柔体贴...你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
、laravel有专门的时间函数吗?还是要使用php取时间的方法?
你可以了解一下laravel的御用时间package
Carbon::now() 就是当前时间。
Carbon这个类库你值得拥有!^^
这个如何显示为中文格式呢
要回复问题请先或
浏览: 13957
关注: 4 人一个Point(点)类,该类具有x,y(表示点的横、纵坐标)两个属性,并定义两个构造方法,一个无参数,将x,y均设_百度知道
一个Point(点)类,该类具有x,y(表示点的横、纵坐标)两个属性,并定义两个构造方法,一个无参数,将x,y均设
y为给定坐标值,设置x。该类的show方法输出该点的坐标值,将x,y均设置为0。求编程程序代码,并定义两个构造方法一个Point(点)类,该类具有x,y(表示点的横、纵坐标)两个属性,另一对坐标值为参数,一个无参数
我有更好的答案
public static void main(String[] args) {
Point point1 =new Point();
point1; }}测试该类的如下代码public class test { /**
* @param args
*/ } public void show(){
System.out.println(&(&),double y){
+y+&)& }}应该是这样做了,不过这道题目很简单,以后这种题目你还是自己做,这样才会进步,加油 补充说一下.y=ypublic class Point {
public Point(){
y=0; } public Point(+x+&,我是用Java写的不是c++,我也不知你是要用什么语言写的.show();
Point point2 =new Point(2,3);
point2.show(),&quot
采纳率:55%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Yii2.0 有没有类似laravel的层级打印函数dd()一样的函数? - 问答 - Yii Framework 中文社区
Yii2.0 有没有类似laravel的层级打印函数dd()一样的函数?
悬赏 10 金钱
Yii2.0 有没有类似laravel的层级打印函数dd()一样的函数?
\yii\helpers\VarDumper::dump(\Yii::$app, 10, true);
vardump 不够用吗?
您需要登录后才可以回答。 |

我要回帖

更多关于 laravel 公共函数放哪 的文章

 

随机推荐