我正在使用"查询"构建器插入数据所有字段都已插入,但是时间戳如created_at和updated_at未插入它们都具有默认的0:0:0值我的插入查询是
$id = DB::table('widgets')
->insertGetId(array(
'creator' => Auth::user()->id,
'widget_name' => $request->input('widget_name'),
'pages' => json_encode($request->input('pages')),
'domain' => $request->input('domain'),
"settings" => $settings,
));
Run Code Online (Sandbox Code Playgroud) 我对具有相似目的的不同 TypeORM 方法感到困惑。来自 TypeORM 文档:
\n.take()\xe2\x80\x94 分页限制。设置要获取的最大实体数。.skip()\xe2\x80\x94 分页偏移量。设置要跳过的实体数量。我不太理解“分页限制/偏移”的含义。但是,不幸的是,我找不到任何有关区分的信息,例如.take(),.limit()信息。我决定在 TypeORM 的源代码中查看这些方法的描述:
.limit()\xe2\x80\x94 设置 LIMIT - 要选择的最大行数。请注意,如果您使用联接,它可能不会按您预期的方式工作。如果您想实现分页,并且您的查询中有 join,那么请使用 take 方法。.offset()\xe2\x80\x94 设置的 OFFSET - 选择偏移。请注意,如果您使用联接,它可能不会按您预期的方式工作。如果您想实现分页,并且您的查询中有 join,那么请使用skip 方法。为什么这两种方法不能用于分页呢?那么他们的目的是什么?请问谁能给我提供使用这 4 种方法的清晰示例吗?提前致谢。
\n如何使用查询生成器实现以下查询?
SELECT *
FROM t
WHERE t.status = 1
OR EXISTS(SELECT *
FROM r
WHERE r.t_id = t.id
AND r.status = 1
)
Run Code Online (Sandbox Code Playgroud)
没有检查的部分很容易,但有没有办法实现EXISTS?
我失去了trilion时间谷歌,但没有一个解决方案是好的.
我有这个查询构建器:
$qb2=$this->createQueryBuilder('s')
->addSelect('u')
->innerJoin('s.user','u')
->where("u.id IN(:followeeIds)")
->andWhere('s.admin_status = false')
->setParameter('user', $user)
->setParameter('followeeIds', $arrayFolloweeIds)
->orderBy('s.id','DESC')
->setMaxResults(15)
;
Run Code Online (Sandbox Code Playgroud)
我可以做第二个查询然后做,$qb->getDQL()但我会缓存查询?
错误:
Invalid parameter number: number of bound variables does not match number of tokens
Run Code Online (Sandbox Code Playgroud) 我想在我的主页上为每个帖子收到所有评论
return
$this->createQueryBuilder('c')
->select('c')
->from('Sdz\BlogBundle\Entity\Commentaire' ,'c')
->leftJoin('a.comments' ,'c')->getQuery()->getResult() ;
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误
[Semantical Error] line 0, col 58 near '.comments c,': Error:
Identification Variable a used in join path expression but was not defined before.
Run Code Online (Sandbox Code Playgroud)
PS:映射是正确的,因为我可以看到页面文章及其注释.
使用以下内容时,只有最后一个where添加到我的查询中;
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select(array('qi'))
->from('Table:Qi', 'qi')
->where("qi.content = " . $content->getId())
->where("qi.queue = " . $child->getQueue()->getId());
Run Code Online (Sandbox Code Playgroud)
我必须这样做才能注意到这两点
$qb->select(array('qi'))
->from('Table:Qi', 'qi')
->where("qi.content = " . $content->getId() .
" AND qi.queue = " . $child->getQueue()->getId());
Run Code Online (Sandbox Code Playgroud)
这似乎不对?如何在多次where通话时使用第一种方法?
我正在尝试按字段(年份)对我的实体进行分组并对其进行计数.
码:
public function countYear()
{
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('b.year, COUNT(b.id)')
->from('\My\Entity\Album', 'b')
->where('b.year IS NOT NULL')
->addOrderBy('sclr1', 'DESC')
->addGroupBy('b.year');
$query = $qb->getQuery();
die($query->getSQL());
$result = $query->execute();
//die(print_r($result));
return $result;
}
Run Code Online (Sandbox Code Playgroud)
我似乎无法说,COUNT(b.id) AS count因为它给出了一个错误,我不知道该用什么作为addOrderby(???, 'DESC')值?
laravel模型提供了一种方法,它可以返回来自另一个关联表的结果.
例如,我有一个名为item的表和另一个名为feedback的表,其中反馈表存储项表中项的反馈.因此,为了得到id为1的项目的所有反馈,我将做:
Item::find(1)->feedback;
Run Code Online (Sandbox Code Playgroud)
以下是返回对象的打印输出.
Illuminate\Database\Eloquent\Collection Object
( [items:protected] => Array
(
[0] => Feedback Object
(
[table:protected] => feedback
[connection:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
[id] => 1
[rma_id] => 3
[item_id] => 8
[quo_id] => 0
[case_id] => i2eM20160120
[line_no] => 000001
[content] => test
[status] => sent
[read] => 0
[sender] => Tester
[created_at] => 2016-01-20 18:03:44
[updated_at] => 2016-01-20 18:03:44
)
[original:protected] => Array
( …Run Code Online (Sandbox Code Playgroud) 我在尝试使用QueryBuilder或DQL时遇到问题.
我有以下关系:
用户<-1:n-> Profile <-n:m-> RouteGroup <-1:n-> Route
我想创建一个DQL,列出特定用户有权访问的所有路由.我可以使用以下代码获取此信息:
$usr = $this->container->get('security.context')->getToken()->getUser();
foreach ($usr->getProfiles() as $profile){
foreach ($profile->getRoutegroups() as $routegroup){
var_dump($routegroup->getRoutes()->toArray());
}
}
Run Code Online (Sandbox Code Playgroud)
由于显而易见的原因,我无法使用此代码,否则我将重载我的服务器,大声笑.
我尝试了以下方法:
DQL:
$em->createQuery('SELECT p FROM CRMCoreBundle:User u
JOIN CRMCoreBundle:Profile p
JOIN CRMCoreBundle:RoleGroup rg
JOIN CRMCoreBundle:Role r
WHERE
u.id=:user')
->setParameter('user', $user->getId())
->getResult();
Run Code Online (Sandbox Code Playgroud)
QueryBuilder(我尝试使用u.profiles - 关系的名称而不是实体 - 但这也不起作用):
$em->createQueryBuilder()
->select('r')
->from('CRMCoreBundle:User', 'u')
->innerJoin('u.profiles','p')
->where('u.id = :user_id')
->setParameter('user_id', $user->getId())
->getQuery()
->getResult();
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗???
更新:我尝试了Zeljko的解决方案并制作了这个脚本:
return $this->getEntityManager()
->createQueryBuilder()
->select('u, r')
->from('CRMCoreBundle:User', 'u')
->innerJoin('u.profiles','p')
->innerJoin('p.routegroups','rg')
->innerJoin('rg.routes','r')
->where('u.id = :user_id')->setParameter('user_id', $user->getId())
->getQuery()
->getResult(); …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个包含收集类型数据的表单,具体取决于所记录的用户.我正在关注Symfony食谱的这一章.
当query_builder选项是一个闭包,我从DQL获取数据时,一切正常.由于需要从代码中的不同位置获取数据,我更愿意在Repository类中定义查询.
这是我的存储库中的函数:
public function findOwnedBy($user) {
$query = $this->getEntityManager()->createQuery("SELECT l FROM MyBundle:Article a JOIN a.owndBy u WHERE u.id = :userId");
$query->setParameters(array("userId"=>$user->getId()));
return $query->getResult();
}
Run Code Online (Sandbox Code Playgroud)
在Controller中调用并返回Article数组时,此函数有效.这是symfony doc的片段:
$formOptions = array(
'class' => 'Acme\DemoBundle\Entity\User',
'multiple' => false,
'expanded' => false,
'property' => 'fullName',
'query_builder' => function(EntityRepository $er) use ($user) {
// build a custom query, or call a method on your repository (even better!)
},
);
Run Code Online (Sandbox Code Playgroud)
当我在query_builder中调用我的Repository函数时,我收到一个错误:Expected argument of type "Doctrine\ORM\QueryBuilder", "array" given我可以理解,因为我的Repository返回一个Entity数组,而不是QueryBuilder.
我不想在表单中复制代码并创建新的QueryBuilder.从存储库中使用查询的最佳做法是什么?我想在存储库中有两个函数,一个返回一个数组,另一个返回QueryBuilder,但是Symfony doc中的注释" …
query-builder ×10
symfony ×4
doctrine ×3
doctrine-orm ×3
dql ×3
php ×3
laravel ×2
left-join ×1
model ×1
mysql ×1
node.js ×1
object ×1
sql-order-by ×1
typeorm ×1