小编Al_*_*Al_的帖子

阻止Laravel将多个记录添加到数据透视表

我有多对多的关系设置和工作,将项目添加到我使用的购物车:

$cart->items()->attach($item);
Run Code Online (Sandbox Code Playgroud)

这会将项目添加到数据透视表中(应该如此),但如果用户再次单击链接以添加他们已添加的项目,则会在数据透视表中创建重复项.

是否有内置的方法将记录添加到数据透视表只有一个尚不存在?

如果没有,我如何检查数据透视表以查找是否已存在匹配的记录?

php laravel eloquent laravel-4

87
推荐指数
2
解决办法
4万
查看次数

JQuery&history.js后退按钮不起作用

我正在使用history.JS(最新)与Jquery(最新)加载和替换网站的一部分,这一切都在工作,目前我只是想让它在现代浏览器中工作,所以我不是在摆弄哈希变化.

一切似乎都有效,但是当我点击浏览器上的后退按钮(最新的FF和Chrome)时,页面不会改变(尽管网址和标题确实发生了变化).我有一个谷歌,看看这里,但我看不到发生了什么.

查看堆栈溢出我找到了这个页面:单击带有History.js的后退按钮时恢复内容似乎问了类似的问题.我已经将#left_col(这是被替换的div)的加载内容添加到状态数据中,但我不确定从那里开始,我知道我需要在状态发生变化时重新加载该数据,但我看不出怎么样.

var History = window.History; 
var origTitle = document.title;
if ( !History.enabled ) {
    return false;
}

History.Adapter.bind(window,'statechange',function(){ 
    var State = History.getState();     
    History.log(State.data, State.title, State.url);
});

$('.ajaxload').live("click", function() {
    History.pushState({state:1,leftcol:$('#left_col').html()}, origTitle, $(this).attr("href"));
    $('#left_col').load($(this).attr("rel"));
    return false;
});
Run Code Online (Sandbox Code Playgroud)

我真的很感激任何帮助!

更新:

我设法让用户点击返回更改页面,但它没有加载正确的状态(它似乎返回两个状态而不是一个),我在上面的代码中添加的代码是:

window.addEventListener('popstate', function(event) {
    var State = History.getState(); 
    $('#left_col').html(State.data.leftcol);
});
Run Code Online (Sandbox Code Playgroud)

javascript jquery history.js

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

Laravel许多自我引用表只能以一种方式工作

我建立了关系和模型如下:

数据透视表模式

Schema::create('friend_user', function(Blueprint $table) {
    $table->increments('id');
    $table->integer('user_id')->unsigned();
    $table->integer('friend_id')->unsigned();
    $table->timestamps();
});
Run Code Online (Sandbox Code Playgroud)

pivot table seeder(这定义了两个'友谊',用户'1'属于user'id,其中user_1在user_id中指定,而第二个用户1在friend id中列出):

    $friend_user = array(
        array(
            'id' => 1,
            'user_id' => 1,
            'friend_id' => 3,
        ),
        array(
            'id' => 2,
            'user_id' => 4,
            'friend_id' => 1,
        ),

    );
Run Code Online (Sandbox Code Playgroud)

用户模型

public function friends()
{
 return $this->belongsToMany('User', 'friend_user', 'user_id', 'friend_id');
}
Run Code Online (Sandbox Code Playgroud)

这是Taylor Otwell在此建议的:https://github.com/laravel/framework/issues/441

这一切都有效,但是当我运行以下命令时,我只得到一个结果:

foreach(Auth::user()->friends as $i) {
    var_dump($i->id);
}
Run Code Online (Sandbox Code Playgroud)

这将返回值"3"但不是预期的4.我明白为什么会发生这种情况(因为user_id不是friend_id)但是如何让它返回属于用户的所有朋友的集合(即所有友谊),而不管连接的哪一端(user_id或friend_id)用户是?

php orm laravel eloquent laravel-4

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

MySQL返回连接表的第一行

我有两个表(country和ducks),其中country表包含世界上的每个国家/地区,ducks表中有一个duckd列表,其中country_id字段链接到主国家/地区.

我正在试图获得一个只有至少有一只鸭子的国家名单,并且该鸭子表中的单一匹配记录是该国家中评级最高的鸭子.到目前为止,我有:

SELECT *
FROM country c 
INNER JOIN ducks d ON c.id = d.country_id
ORDER BY c.country ASC, d.rating DESC
Run Code Online (Sandbox Code Playgroud)

这将返回每个鸭子的列表,而不是每个国家只有一个.

如果有人能指出我正确的方向,我将不胜感激.我宁愿在SQL中执行它而不是为每个国家单独查询以获得最高评级的鸭子.

php mysql sql join greatest-n-per-group

9
推荐指数
2
解决办法
9307
查看次数

Doctrine不允许ResultSetMappingBuilder工作

我正在使用Symfony 2和学说.我已经设置了一个带有自定义查找功能的自定义存储库.当它加入子查询时,我非常肯定从我读过的内容中我需要使用ResultSetMappingBuilder从查询中获取结果.但我不断收到以下错误:

The column 'id' conflicts with another column in the mapper. 
Run Code Online (Sandbox Code Playgroud)

我的代码是:

    $sql ="SELECT c.id as cid, c.country, c.rank, c.continent, q.*
        FROM country c
        INNER JOIN (
            SELECT d.* , MAX( d.rating ) AS maxrating
            FROM ducks d
            GROUP BY d.country_id
        )q ON ( q.country_id = c.id )";

    $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->getEntityManager());
    $rsm->addRootEntityFromClassMetadata('Wfuk\DuckBundle\Entity\Country', 'c', array('id' => 'cid'));
    $rsm->addJoinedEntityFromClassMetadata('Wfuk\DuckBundle\Entity\Ducks', 'ducks', 'c', 'country_id');

    $query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
    return $query->getResult();
Run Code Online (Sandbox Code Playgroud)

SQL查询在它自己运行时没有任何问题,并返回我期望的结果.

更新,我已经通过重新映射addRootEntityFromClassMetadata上的id字段修复了id问题,但我仍然遇到修改后的joinedEntity的问题:

    $rsm->addJoinedEntityFromClassMetadata('Wfuk\DuckBundle\Entity\Ducks', 'ducks', 'c', 'country_id');
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Notice: Undefined index: country_id in …
Run Code Online (Sandbox Code Playgroud)

php doctrine symfony doctrine-orm

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

Laravel 4:在包中使用视图

我在Laravel 4中创建了一个非常基本的应用程序,这是我将在各种项目中重复使用的东西,所以在我走得太远之前将它转换为包是有意义的,但我很难做出改变让它工作,我认为主要是由于弄清楚如何访问应用程序中通常可用的各种对象,例如View :: make

我在应用程序中使用了以下代码:

class PageController extends BaseController {

public function showPage($id)
{
            //do stuff
            return View::make('page/showPage')
                 ->with('id', $id)
                 ->with('page', $page);
}
Run Code Online (Sandbox Code Playgroud)

对于包我有以下内容:

use Illuminate\Routing\Controllers\Controller;
use Illuminate\Support\Facades\View;

class PageController extends Controller {

public function showPage($id)
{
      //do stuff        
      return View::make('page/showPage')
                 ->with('id', $id)
                 ->with('page', $page);
}
Run Code Online (Sandbox Code Playgroud)

但是,这不会加载位于以下位置的刀片模板:

workbench/packagenamespace/package/src/views/page/showPage.blade.php
Run Code Online (Sandbox Code Playgroud)

这也不起作用:

return View::make('packagenamespace/package/src/page/showPage')
Run Code Online (Sandbox Code Playgroud)

另外,我想知道我用use语句做了什么,我使用了facade对象,对我而言,似乎应该有一种更简洁的方式来访问View对象之类的东西?

php laravel laravel-4

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

Symfony2/Doctrine如何在实体中存储相关对象的计数

我已经设置了一个包含测试对象的包,该对象包含许多testQuestion对象,每个对象都是一个问题和给定的答案(如果没有答案则为0).从树枝上我希望能够从测试对象中获取信息,说明有多少问题以及已经回答了多少问题.

我创建了一个查询来将其从数据库中拉出来,在测试实体中我创建了2个新属性来存储问题的数量和回答的数量.我创建了一个查询所在的TestRepository.Test对象检查对象是否设置了值,如果没有,则在需要时加载它,因为我不总是需要这些信息.

但是我仍然坚持如何将存储库代码链接到测试对象,既调用repo函数又调用repo函数将值保存到相关的Test对象.

ACME/Quizbundle /测试/ test.php的

namespace Acme\QuizBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Acme\QuizBundle\Entity\TestRepository;

/**
 * @ORM\Entity(repositoryClass="Acme\QuizBundle\Entity\TestRepository")
 * @ORM\Table(name="test")
 */
class Test    {
protected $numQuestions = null;
protected $numQuestionsAnswered = null;

public function getNumQuestionsAnswered () {
    if (is_null($this->numQuestionsAnswered)) {
        $repository = $this->getEntityManager()->getRepository('\AcmeQuizBundle\Test');
        $values = $repository->calculateNumQuestions();
    }
    return $this->numQuestionsAnswered;
}
Run Code Online (Sandbox Code Playgroud)

Acme/Quizbundle/Test/TestRepository.php(有一个getNumQuestions()的匹配方法)

namespace Acme\QuizBundle\Entity;

use Doctrine\ORM\EntityRepository;

class TestRepository extends EntityRepository {

private function calculateNumQuestions() {

    $qb = $this->getEntityManager()
                ->createQueryBuilder();

    $query = $this->getEntityManager()->createQueryBuilder()
                        ->select('COUNT(id)')
          ->from('testquestion', 'tq')
          ->where('tq.test_id = :id')
          ->setParameter('id', $this->getId())
          ->getQuery();

    $result …
Run Code Online (Sandbox Code Playgroud)

php symfony doctrine-orm

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

在Laravel 4中创建命名空间

我正在努力在Laravel 4中建立一个有效的名称空间,我已经在此处和代码亮本中阅读了一些指南。但我似乎仍然无法弄清楚。我的应用程序设置如下:

app / controllers / itemController app / services / itemValidator

在我的composer json文件中(每次更改时我都会进行转储-自动加载),我有:

"autoload": {
    "classmap": [
        <usual data...>
        "app/repositories",
        "app/services",
    ],
    "psr-0": {
        "Services": "app/services/"
    }
Run Code Online (Sandbox Code Playgroud)

我的项目控制器设置为:

<?php
use Services\ItemValidator;

class ItemsController extends BaseController {

public function store()
{
   $validator = new ItemValidator;
.....etc.....
Run Code Online (Sandbox Code Playgroud)

并且我的ItemsValidator类设置为:

 <?php namespace Services;

 class ItemValidator extends BaseValidator
 {
 ....code....
Run Code Online (Sandbox Code Playgroud)

当到达该$validator = new ItemValidator行时,这给了我以下错误:

Class 'Services\ItemValidator' not found 
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-4

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

laravel使用查询构建器而不链接

我有一个工作的查询构建器:

        $article = Page::where('slug', '=', $slug)
                     ->where('hide', '=', $hidden)
                     ->first();
Run Code Online (Sandbox Code Playgroud)

但我想只添加第二个where语句,如果隐藏等于1.我已经尝试了下面的代码,它显示了我正在尝试做的逻辑,但它不起作用.

$article = Page::where('slug', '=', $slug);
if ($hidden == 1) {
    $article->where('hide', '=', 1);
}
$article->first();
Run Code Online (Sandbox Code Playgroud)

我正在使用Laravel 4,但我认为问题仍然存在于Laravel 3中.

php laravel laravel-4

4
推荐指数
1
解决办法
2109
查看次数

MySQL无法从备份恢复表 - #1366 - 字符串值不正确

我最近工作的一个网站有一个数据库问题,显然当它们恢复表格时,任何带有奇怪符号的文本字段(例如半符号和度数符号)文本字段停止在该符号前面的字符时,它就会被破坏.我有一份表的副本,并将其提取到下面的代码:

    CREATE TABLE `products2` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `description` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
      PRIMARY KEY (`id`)
    ) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


    insert  into products2 values  
(25, 0x5468652044504D203931322069732061206C617267652033BD204469676974204C434420566F6C746D657465722E20546865207369676E616C206265696E67206D6561737572656420697320616C736F207573656420746F20706F77657220746865206D657465722C20696E636C7564696E6720746865206261636B6C696768742E20546865206D657465722066656174757265732061203320746F20363056206D6561737572656D656E742072616E67652C20776974682061207265736F6C7574696F6E206F662031306D56206265747765656E20332E303020616E642031392E39395620616E64203130306D56206265747765656E2032302E3020616E642036302E30562E205768656E2074686520766F6C746167652064726F70732062656C6F772033562C204C4F20697320646973706C617965642028646F776E20746F20322E38562C207768656E2074686520646973706C61792077696C6C207475726E206F6666292E209148499220697320646973706C61796564207768656E2074686520766F6C7461676520676F65732061626F7665203630562E0D0A0D0A5363726577207465726D696E616C7320616C6C6F7720666F7220717569636B20616E64206561737920636F6E6E656374696F6E2E20546865206D6574657220697320686F7573656420696E206120726F6275737420636172726965722077686963682063616E20626520626F6C74656420696E20706C616365206F722070616E656C206D6F756E746564207573696E6720746865206C6F772070726F6669206C652062657A656C20616E6420636C6970732070726F76696465642E20416E2049503637202F204E454D412034582062657A656C20697320616C736F20617661696C61626C6520666F722070726F74656374696F6E20616761696E7374206475737420616E64206D6F6973747572652E0D0A0D0A417320746869732069732061206E65772064657369676E2077652073756767657374207468617420796F7520636F6E74616374204C617363617220666F7220757020746F2064617465206C6561642D74696D6520696E666F726D6174696F6E206265666F7265206F72646572696E67206F6E6C696E652E0D0A)
Run Code Online (Sandbox Code Playgroud)

这会引发错误:

#1366 - Incorrect string value: '\xBD Digi...' for column 'description' at row 1 
Run Code Online (Sandbox Code Playgroud)

在stackoverflow和网络上查看这个问题似乎是编码的一个问题,我已经尝试将描述字段中的排序更改为utf_unicode_ci,并将表的排序更改为utf_bin(及其所有组合)全部徒劳无功.

我无法重做转储,因为它是备份.我不明白系统如何输出转储但不接受它 - 可能是备份是通过命令行(不确定),我使用PHPMyAdmin来恢复它我不知道是否有所作为.

如果无法导入数据,我将不胜感激,如果有人能告诉我如何将编码数据读入文本,然后我可以手动剪切和粘贴.

mysql mysqldump

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

Symfony和Doctrine使连接的查询起作用

我有一个SQL查询返回一个表(国家)中的所有行,这些表在另一个表(ducks)中有相关条目,但我很难将其转换为DQL.这是一个标准的一对多关系,因为每个国家可以有多个鸭子,我相信它都是正确设置的,因为我可以在一个国家内返回鸭子并使用标准代码返回该国家.

工作查询是:

SELECT c.* FROM country c 
INNER JOIN ducks d 
ON c.id = d.country_id 
GROUP BY c.country 
ORDER BY c.country ASC
Run Code Online (Sandbox Code Playgroud)

我试过将其转换为:

SELECT c FROM WfukDuckBundle:Country c 
INNER JOIN WfukDuckBundle:Ducks d 
ON c.id = d.country_id 
GROUP BY c.country 
ORDER BY c.country ASC
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误:

[Semantical Error] line 0, col 79 near 'd ON': Error: Identification Variable 
WfukDuckBundle:Ducks used in join path expression but was not defined before. 
Run Code Online (Sandbox Code Playgroud)

我对Symfony/Doctrine很新,所以我怀疑它可能是显而易见的!

我正在使用带有学说的Symfony 2.0.11

更新:我也尝试过:

SELECT c FROM WfukDuckBundle:Country c 
INNER JOIN c.ducks d …
Run Code Online (Sandbox Code Playgroud)

php mysql doctrine symfony

0
推荐指数
1
解决办法
6245
查看次数