小编Len*_*eng的帖子

Laravel:按属性从集合中获取对象

在Laravel中,如果我执行查询:

$foods = Food::where(...)->get();
Run Code Online (Sandbox Code Playgroud)

......然后$foods照亮收集Food模型对象.(基本上是一系列模型.)

但是,这个数组的键只是:

[0, 1, 2, 3, ...]
Run Code Online (Sandbox Code Playgroud)

...所以如果我想改变Food一个id24 的对象,我不能这样做:

$desired_object = $foods->get(24);
$desired_object->color = 'Green';
$desired_object->save();
Run Code Online (Sandbox Code Playgroud)

...因为这只会改变数组中的第25个元素,而不是id24 的元素.

如何通过ANY属性/列从集合中获取单个(或多个)元素(例如但不限于id/color/age /等)?

当然,我可以这样做:

foreach ($foods as $food) {
    if ($food->id == 24) {
        $desired_object = $food;
        break;
    }
}
$desired_object->color = 'Green';
$desired_object->save();
Run Code Online (Sandbox Code Playgroud)

......但是,这只是粗暴的.

当然,我可以这样做:

$desired_object = Food::find(24);
$desired_object->color = 'Green';
$desired_object->save();
Run Code Online (Sandbox Code Playgroud)

...但是这更加严重,因为当我已经在$foods集合中拥有所需的对象时,它会执行额外的不必要的查询.

提前感谢任何指导.

编辑:

为了清楚起见,您可以调用->find()Illuminate Collection而不会生成另一个查询,但它只 …

php mysql laravel

77
推荐指数
6
解决办法
11万
查看次数

苦苦挣扎与OOP概念

我真的在反复出现OOP /数据库概念.

请允许我解释伪PHP代码的问题.

假设您有一个"用户"类,它users在其构造函数中从表中加载其数据:

class User {
    public $name;
    public $height;

    public function __construct($user_id) {
        $result = Query the database where the `users` table has `user_id` of $user_id
        $this->name= $result['name'];
        $this->height = $result['height'];
    }
}
Run Code Online (Sandbox Code Playgroud)

简单,棒极了.

现在,我们有一个"group"类,它从与groups表连接的groups_users表中加载其数据,并user从返回的user_ids 创建对象:

class Group {
    public $type;
    public $schedule;
    public $users;

    public function __construct($group_id) {
        $result = Query the `groups` table, joining the `groups_users` table,
                    where `group_id` = $group_id
        $this->type = $result['type'];
        $this->schedule = …
Run Code Online (Sandbox Code Playgroud)

php database oop model-view-controller codeigniter

14
推荐指数
2
解决办法
1189
查看次数

GIT:无法推送(奇怪的配置问题)

我正在全新安装Linux Mint.

尝试从任何存储库推送时,我收到以下错误:

error: Malformed value for push.default: simple
error: Must be one of nothing, matching, tracking or current.
fatal: bad config file line 8 in /home/leng/.gitconfig
fatal: Could not read from remote repository.
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我肯定有一个支持简单推送行为的版本.

输出git --versiongit version 1.8.3.2.

内容~/.gitconfig:

[user]
    name = My Name
    email = MyEmail@website.com
[color]
    ui = true
[push]
    default = simple
Run Code Online (Sandbox Code Playgroud)

这是令人毛骨悚然的地方.

如果我改变行为matching(或nothing,tracking或者current,对于这个问题),然后尝试推,我得到完全相同的错误消息.怎么可能?是以某种方式缓存配置?我甚至尝试重启.我甚至尝试从系统中彻底清除GIT(并删除~/.gitconfig)然后重新安装它.

如果我[push]从.gitconfig文件中完全删除该部分(或者如果我完全删除该文件),那么尝试推送,然后我得到:

Git 2.0 from …
Run Code Online (Sandbox Code Playgroud)

linux git linux-mint

8
推荐指数
1
解决办法
3782
查看次数

Laravel Eloquent和命名空间问题

我正在为Laravel构建一个CMS包.

此软件包中的所有模型都与IoC容器绑定并解析,以便在软件包的任何单独部署中轻松覆盖它们.

对于非多态关系,这有一定的魅力.

例如,一个Page有很多PageModules,所以它的关系改为:

// \Angel\Core\Page

public function modules()
{
    return $this->hasMany('PageModule');
}
Run Code Online (Sandbox Code Playgroud)

至:

// \Angel\Core\Page

public function modules()
{
    return $this->hasMany(App::make('PageModule'));
}
Run Code Online (Sandbox Code Playgroud)

但是我无法弄清楚如何用多态关系做同样的事情.

例如,菜单包含MenuItems,每个MenuItem可以绑定到一个其他模型,例如Page或BlogPost.

为了实现这个Laravel方式,我为MenuItem添加了以下关系:

// \Angel\Core\MenuItem

public function linkable()
{
    return $this->morphTo();
}
Run Code Online (Sandbox Code Playgroud)

而这种关系LinkableModel,其全系车型,如网页和博客帖子延伸:

// \Angel\Core\LinkableModel

public function menuItem()
{
    return $this->morphOne(App::make('MenuItem'), 'linkable');
}
Run Code Online (Sandbox Code Playgroud)

menus_items表(其中的MenuItems使用)具有以下行:

linkable_type      |  linkable_id
-------------------|--------------
\Angel\Core\Page   |   11
\Angel\Core\Page   |   4
Run Code Online (Sandbox Code Playgroud)

这很好用,但是我需要linkable_type说'Page'而不是'\ Angel\Core\Page',并且要从IoC的'Page'中解析而不是硬编码到特定的命名空间类.

我试过的:

根据这个问题 …

php mysql laravel eloquent laravel-4

6
推荐指数
1
解决办法
1003
查看次数

Chrome突然停止接受insertRule()

我有一个HTML5游戏,已经运行了好几个星期.

突然,大约一个小时前,它将不再在Chrome中运行.我将问题缩小到仅在Chrome中出现的JavaScript错误.

我在这里已经隔离了代码:http: //jsfiddle.net/quM3L/

......错误发生在第4行:

var style = document.documentElement.appendChild(document.createElement("style"));
var rule =  "score_10_typing {from {width: 0} to {width: 11em}}";
if (CSSRule.KEYFRAMES_RULE) { // W3C
    style.sheet.insertRule("@keyframes " + rule, 0);
}
else if (CSSRule.WEBKIT_KEYFRAMES_RULE) { // WebKit
    style.sheet.insertRule("@-webkit-keyframes " + rule, 0);
}
else if (CSSRule.MOZ_KEYFRAMES_RULE) { // Mozilla
    style.sheet.insertRule("@-moz-keyframes " + rule, 0);
}
Run Code Online (Sandbox Code Playgroud)

...在Firefox,Internet Explorer,Safari等中运行良好

直到一小时前它在Chrome中运行良好.(在多台计算机上测试过.)

有没有人知道如何解决这个问题?我想,Chrome今天必须更新他们的JS引擎,不支持CSSStyleSHeet.insertRule().

在此先感谢您的帮助.

(原始游戏位于此处. 正如您所看到的,它可以在Chrome以外的所有浏览器中正常运行.)

javascript css html5 google-chrome css3

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

Laravel:绑定到IoC Container

如果将类绑定到IoC ...

App::bind('Thing', function() {
    return new \ThingOne;
});
Run Code Online (Sandbox Code Playgroud)

然后,除非您调用,否则永远不会实例化ThingOne对象.这是一件好事.App::make('Thing')

但是,如果您尝试覆盖该绑定:

App::bind('Thing', function() {
    return new \ThingOne;
});
App::bind('Thing', function() {
    return new \ThingTwo;
});
App::bind('Thing', function() {
    return new \ThingThree;
});
Run Code Online (Sandbox Code Playgroud)

...然后一个ThingTwo对象和一个ThingThree对象将被实例化(并且它们的构造函数被调用),即使你从未调用过App::make('Thing')!这是件坏事!为什么,以及如何防止这种情况?IoC服务的目的是什么,如果不允许我们覆盖绑定,以便我们可以扩展包等等?(这就是我想要做的事情:在我的包中将类绑定到IoC,然后在其他项目上实现这些包时可选地覆盖它们.)

顺便说一句,这种情况无论使用bind()还是singleton()没什么区别.

非常感谢您的任何指导.

php class inversion-of-control laravel

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