我有多对多的关系设置和工作,将项目添加到我使用的购物车:
$cart->items()->attach($item);
Run Code Online (Sandbox Code Playgroud)
这会将项目添加到数据透视表中(应该如此),但如果用户再次单击链接以添加他们已添加的项目,则会在数据透视表中创建重复项.
是否有内置的方法将记录添加到数据透视表只有一个尚不存在?
如果没有,我如何检查数据透视表以查找是否已存在匹配的记录?
我正在使用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) 我建立了关系和模型如下:
数据透视表模式
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)用户是?
我有两个表(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中执行它而不是为每个国家单独查询以获得最高评级的鸭子.
我正在使用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) 我在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对象之类的东西?
我已经设置了一个包含测试对象的包,该对象包含许多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) 我正在努力在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) 我有一个工作的查询构建器:
$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中.
我最近工作的一个网站有一个数据库问题,显然当它们恢复表格时,任何带有奇怪符号的文本字段(例如半符号和度数符号)文本字段停止在该符号前面的字符时,它就会被破坏.我有一份表的副本,并将其提取到下面的代码:
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来恢复它我不知道是否有所作为.
如果无法导入数据,我将不胜感激,如果有人能告诉我如何将编码数据读入文本,然后我可以手动剪切和粘贴.
我有一个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 ×9
laravel ×5
laravel-4 ×5
mysql ×3
symfony ×3
doctrine ×2
doctrine-orm ×2
eloquent ×2
history.js ×1
javascript ×1
join ×1
jquery ×1
mysqldump ×1
orm ×1
sql ×1