我想从Auction表的id列中获取一组值.如果这是一个原始SQL我会写:
SELECT id FROM auction
Run Code Online (Sandbox Code Playgroud)
但是当我在Doctrine中执行此操作并执行:
$em->createQuery("SELECT a.id FROM Auction a")->getScalarResult();
Run Code Online (Sandbox Code Playgroud)
我得到一个像这样的数组:
array(
array('id' => 1),
array('id' => 2),
)
Run Code Online (Sandbox Code Playgroud)
相反,我想得到这样的数组:
array(
1,
2
)
Run Code Online (Sandbox Code Playgroud)
我怎么能用Doctrine做到这一点?
我正在设计一个REST Http api.(使用HATEOAS的东西,让客户"更简单",并避免客户做复杂的事情,而不是让api告诉他们该怎么做......)
由于应用程序的社交特性,为了与应用程序交互,用户需要进行身份验证,并且每个用户都会对数据略有不同的"视图".我们以twitter为例,对每个人来说都会更容易.
要对用户进行身份验证,我们将轻松使用OAuth.
因此,在客户端(ios app ...)中,随机用户可能会看到用户列表应该看到:
Adrien: Following
John: Not Following
Rambo: Not Following
Run Code Online (Sandbox Code Playgroud)
另一个用户可能会看到:
Adrien: Following
John: Not Following
Rambo: Following
Run Code Online (Sandbox Code Playgroud)
为实现这一目标,第一个解决方案将是客户端(在oauth术语中,iphone/web/etc应用程序),以获取经过身份验证的用户遵循的所有用户的列表,并且每次客户端显示列表时,比较每个具有被跟踪用户列表的用户,以确定其是否应显示"不跟随"或"关注".
请求/回复将是:
GET /users
Authorization: OAuth token...
[
{"id": 1, "name": "Adrien"},
{"id": 2, "name": "John"},
{"id": 3, "name": "Rambo"}
]
Run Code Online (Sandbox Code Playgroud)
和
GET /users/{myid}/following
Authorization: OAuth token...
[1, 3, 25, 1210, 9]
Run Code Online (Sandbox Code Playgroud)
这似乎是相当无国籍的.好.
现在如果我想让客户端开发人员生活更轻松,并直接嵌入用户列表响应,每个用户与经过身份验证的用户之间的关系,该怎么办?
GET /users
Authorization: OAuth token...
[
{"id": 1, "name": "Adrien", "relationship": "Following"},
{"id": 2, "name": "John", "relationship": "Not Following"},
{"id": 3, "name": …Run Code Online (Sandbox Code Playgroud) 我有一个简单的模型(源代码简化):
class Collection
{
public $page;
public $limit;
}
Run Code Online (Sandbox Code Playgroud)
和表单类型:
class CollectionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('page', 'integer');
$builder->add('limit', 'integer');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'FSC\Common\Rest\Form\Model\Collection',
));
}
}
Run Code Online (Sandbox Code Playgroud)
我的控制器:
public function getUsersAction(Request $request)
{
$collection = new Collection();
$collection->page = 1;
$collection->limit = 10;
$form = $this->createForm(new CollectionType(), $collection)
$form->bind($request);
print_r($collection);exit;
}
Run Code Online (Sandbox Code Playgroud)
当我POST /users/?form[page]=2&form[limit]=20,回应是我所期望的:
Collection Object
(
[page:public] => 2
[limit:public] => 20
)
Run Code Online (Sandbox Code Playgroud)
现在,当我POST /users/?form[page]=3 …
我想知道在 JAVA 中解析 json 的最快方法是什么?
谢谢
这两个代码段之间有什么区别.第一个用\ ,第二个用\\.
第一:
<?php
// File: app/autoload.php
$loader->registerNamespaces(array(
'Knp\\Component' => __DIR__.'/../vendor/knp-components/src',
'Knp\\Bundle' => __DIR__.'/../vendor/bundles',
// ...
));
Run Code Online (Sandbox Code Playgroud)
第二个:
<?php
// File: app/autoload.php
$loader->registerNamespaces(array(
'Knp\Component' => __DIR__.'/../vendor/knp-components/src',
'Knp\Bundle' => __DIR__.'/../vendor/bundles',
// ...
));
Run Code Online (Sandbox Code Playgroud)
它们是不同的还是它们的工作原理相同?
这是一个实体(EDITED:完整文件内容)
// Eve\MoonBundle\Entity\MoonMaterial.php
namespace Eve\MoonBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
//use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Table(name="_moon_material")
* @ORM\Entity()
*/
class MoonMaterial
{
public function __construct()
{
//$this->invTypes_byTypeID = new ArrayCollection();
}
// relations start
/**
* @ORM\OneToOne(targetEntity="Eve\DumpBundle\Entity\invTypes")
* @ORM\JoinColumn(name="typeID", referencedColumnName="typeID")
*/
private $invTypes_byTypeID;
public function get_invTypes_byTypeID()
{
return $this->invTypes_byTypeID;
}
// relations end
/**
* @ORM\Column(name="userID", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
private $userID;
/**
* @ORM\Column(name="moonID", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
private $moonID;
/**
* @ORM\Column(name="typeID", …Run Code Online (Sandbox Code Playgroud) 在symfony2和doctrine 2.我有这个
/**
* Find a user by its username.
*
* @param string $username
* @return UserInterface or null if user does not exist
*/
function findUserByUsername($username);
Run Code Online (Sandbox Code Playgroud)
现在我想知道它是否解决了目的,或者它是否在数据库中使用这些@param和@return注释做任何事情,或者它们仅用于文档
我正在尝试为对象手动设置外键 ID,但没有找到方法
class Item
{
/**
* @ORM\ManyToOne(targetEntity="MyBundle\Entity\ItemType", inversedBy="itemTypes")
* @ORM\JoinColumn(name="type_id", referencedColumnName="id")
*/
protected $item_type;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做一些链接?
$item = new Item();
$item->setItemTypeId(1); // This generate an error.
Run Code Online (Sandbox Code Playgroud)
还是我必须这样做?
$item = new Item();
$type = Repository::RetrieveById(1);
$item->setItemType($type); // This generate an error.
Run Code Online (Sandbox Code Playgroud) Symfony 2 支持 Percona 吗?或者我应该坚持使用MySQL?我正在运行 Debian 6 (squeeze) 并安装了 MySQL,但在安装 Symfony 之前我在想也许 Percona 会更好(更快)?
谢谢。
symfony2应用程序具有一个Job具有类型属性的实体WebSite.
没有其他属性或方法的简化表示:
/**
* @ORM\Entity
* @ORM\Table(name="Job")
*/
class Job
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="integer", name="website_id", nullable=false)
* @ORM\ManyToOne(targetEntity="Example\ExampleBundle\Entity\WebSite")
*/
protected $website;
}
Run Code Online (Sandbox Code Playgroud)
Symfony/Doctrine试图website在持久化时将属性转换为字符串,从而导致错误:
可捕获的致命错误:类的对象示例\ ExampleBundle\Entity\WebSite无法转换为/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php第131行中的字符串
我相信上面的@ORM\Column注释表示website属性是一个整数.我不明白为什么Symfony/Doctrine希望尝试将website属性转换为字符串.
我试图解决此问题的非理想解决方法:
添加__toString()方法WebSite,返回id属性的字符串表示,导致正确的值最终在Job.website_id数据域中结束; 这种解决方法是不切实际的,因为我将来需要__toString()在应用程序的其他地方提供字符串.
@ORM\Column从website属性中删除注释; 这导致所有未来差异生成的迁移(php app/console doctrine:migrations:diff)删除相关数据库字段的"not null"方面.
我是否应对上述注释做出任何更改,以通知Symfony/Doctrine 在持久化时调用获取所需内容的getId()方法WebSite?我可以做出任何改变WebSite来实现同样的目标吗?
需要进行哪些更改才能确保上述注释可以保留在原位,以便Doctrine最终调用WebSite.getId()以获取持久存在时所需的内容,而不是尝试将对象强制转换为字符串?
我已经创建了一个UIView子类并想要执行一个方法initWithFrame:,但是这个方法没有被调用.
当我调用initWithCoder:正在执行的方法时,代码崩溃显示此错误:
由于未捕获的异常'NSGenericException'而终止应用程序,原因是:'此编码器要求从初始化编码器方法返回替换的对象:'
我的代码是:
-(void)initialize
{
//code
}
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self initialize];
// Initialization code
}
return self;
}
- (id)initWithCoder:(NSCoder *)aCoder
{
self = [super initWithCoder:aCoder];
if(self)
{
[self initialize];
}
return self;
}
Run Code Online (Sandbox Code Playgroud) doctrine-orm ×5
symfony ×5
php ×4
symfony-2.1 ×2
annotations ×1
api ×1
doctrine ×1
foreign-keys ×1
hateoas ×1
http ×1
ios ×1
java ×1
json ×1
mysql ×1
objective-c ×1
one-to-one ×1
orm ×1
percona ×1
rest ×1