i have following models in yii2:
use frontend\modules\bewerber\models\Bewerber;
use common\modules\basis\models\base\Person;
use common\modules\lookup\models\LAnrede;
How to create following query using methods of ActiveRecord?
SELECT anrede FROM L_anrede JOIN Person ON L_anrede.id=Person.id_anrede WHERE Person.id IN
(SELECT id_person FROM Bewerber WHERE Bewerber.id_person=1);
P.S.: The last WHERE clause should be not fix but variable like this:
var_dump(LAnrede::findOne([$model->id_person])->anrede)
which will put out following result:Mister or Miss
................................................................
Hint for Fabrizio Caldarelli
................................................................
Ur solution won't help me:=(
This is ur code:
$idPerson = 1;
$show=LAnrede::find()->joinWith(['Person' => function($q) use($idPerson) {
$q->andWhere([
'Person.id' => (new \yii\db\Query())->from('Bewerber')->where(['Bewerber.id_person' => $idPerson])
])->anrede;
}]);
and this is var_dump($show);
E:\xampp\htdocs\yii2_perswitch\frontend\modules\bewerber\views\bewerber\index.php:48:
object(common\modules\lookup\models\LAnredeQuery)[207]
public 'sql' => null
public 'on' => null
public 'joinWith' =>
array (size=1)
0 =>
array (size=3)
0 =>
array (size=1)
...
1 => boolean true
2 => string 'LEFT JOIN' (length=9)
public 'select' => null
public 'selectOption' => null
public 'distinct' => null
public 'from' => null
public 'groupBy' => null
public 'join' => null
public 'having' => null
public 'union' => null
public 'params' =>
array (size=0)
empty
private '_events' (yii\base\Component) =>
array (size=0)
empty
private '_behaviors' (yii\base\Component) =>
array (size=0)
empty
public 'where' => null
public 'limit' => null
public 'offset' => null
public 'orderBy' => null
public 'indexBy' => null
public 'emulateExecution' => boolean false
public 'modelClass' => string 'common\modules\lookup\models\LAnrede' (length=36)
public 'with' => null
public 'asArray' => null
public 'multiple' => null
public 'primaryModel' => null
public 'link' => null
public 'via' => null
public 'inverseOf' => null
I use Gridview like this
$gridColumn = [
[
'attribute' => '',
'label' => Yii::t('app', 'Anrede'),
'format' => 'html',
'value' => function($model) {
return "<p><font color='green'>" . LAnrede::findOne([$model->id_person])->anrede . "</p>";
}
],
];
Colud u show me up how to use ur solution in this context?
This should work:
$idPerson = 1;
LAnrede::find()->joinWith(['Person' => function($q) use($idPerson) {
$q->andWhere([
'Person.id' => (new \yii\db\Query())->from('Bewerber')->where(['Bewerber.id_person' => $idPerson])
]);
}])
->all();
'Person' is a relation in LAnrede model (one or many relation?)
public function getPerson()
{
return $this->hasMany(Person::className(), ['id_anrede' => 'id']);
}
i have problems with the zend framework 1, i use a paywall api and it use a pingback url methode, for example:
myurl.com/payback?user_id=123&foo=bar...
But the problem is now i can't read the params in zendframework.
It work only if i do it like that
myurl.com/payback/user_id/123/foo/bar
i used different methodes to read it out:
$q = $this->getRequest()->getQuery();
$p = $this->getRequest()->getParams();
the request object look like that:
object(Zend_Controller_Request_Http)[74]
protected '_paramSources' =>
array (size=2)
0 => string '_GET' (length=4)
1 => string '_POST' (length=5)
protected '_requestUri' => string '/index/paywall?uid=zIhvpyVslUS5ND79AfMeBPao1LjXY2Kc&goodsid=6001&slength=&speriod=&type=0&ref=&is_test=1&sig=c62538caf7a36ea2f3a795bb3dc32c07' (length=141)
protected '_baseUrl' => string '' (length=0)
protected '_basePath' => null
protected '_pathInfo' => string '/index/paywall' (length=14)
protected '_params' =>
array (size=3)
'controller' => string 'index' (length=5)
'action' => string 'paywall' (length=7)
'module' => string 'default' (length=7)
protected '_rawBody' => null
protected '_aliases' =>
array (size=0)
empty
protected '_dispatched' => boolean true
protected '_module' => string 'default' (length=7)
protected '_moduleKey' => string 'module' (length=6)
protected '_controller' => string 'index' (length=5)
protected '_controllerKey' => string 'controller' (length=10)
protected '_action' => string 'paywall' (length=7)
protected '_actionKey' => string 'action' (length=6)
I Hope someone can help me,
thank you
Trying to embed a collection or just a simple type containing a file field, but both result in the same problem. On post the UploadedFile is present, but validation fails. "This value is not valid."
Bashing my head in all day, anyone?
Company form:
Simple embed with a file:
$builder->add('logo', new FileType(), [
'label' => 'Logo',
'required' => false,
'attr' => [
'accept' => 'image/*',
]
]);
Collection with files:
$builder->add('images', 'collection', array(
'type' => new FileType(),
'data' => [
new File(),
new File(),
new File(),
],
));
FileType:
class FileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$data = $builder->getData();
$builder->add('file', 'file', [
'label' => 'Bestand',
]);
$builder->add('submit', 'submit', [
'label' => 'Save',
]);
}
public function getName()
{
return 'file';
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\DemoBundle\Entity\File',
));
}
}
The entity has a functioniong one-to-many from Company to File.
Everything works, but when the form is submitted. Both fields have a "This value is not valid." error.
Here is a dump of the clientData preSubmit:
'logo' =>
object(Symfony\Component\HttpFoundation\File\UploadedFile)[13]
private 'test' => boolean false
private 'originalName' => string 'etc.jpg' (length=13)
private 'mimeType' => string 'image/jpeg' (length=10)
private 'size' => int 103843
private 'error' => int 0
'images' =>
array (size=3)
0 =>
object(Symfony\Component\HttpFoundation\File\UploadedFile)[14]
private 'test' => boolean false
private 'originalName' => string 'Screen Shot 2014-07-24 at 17.15.30.png' (length=38)
private 'mimeType' => string 'image/png' (length=9)
private 'size' => int 84102
private 'error' => int 0
1 => null
2 => null
Seems perfectly fine to me!
I am trying to store an instance of Zend_Log (with Zend_Log_Writer_Stream) to Zend_Cache(preferably) or Zend_Registry(fallback) but with the custom helper as an abstraction layer instead of direct access.
Problem
Except when using Zend_Registry directly, everytime Zend_Log_Writer_Stream's _stream property disappears.
I have attached my code below along with the output it generates.
I am not following these links because I have another writer Zend_Log_Writer_Database that writes to a separate database than application so i need to initialize that. For now i have commented it out.
Bootstrap.php - clipped
protected function _initLog() {
// instantiate CacheOrRegistry variable.
$this->_cor = Helper_SCacheOrRegistry::getInstance();
// make sure its not already cached and config for this resource exists.
if ($this->_cor->exists('logger') || !($config = $this->_config->resources->log))
return;
$logger = new Zend_Log();
$config = $config->toArray();
/*
if (isset($config['db']) && is_array($config['db'])) {
$dbParams = $config['db'];
$writerDb = new Zend_Log_Writer_Db(
$this->_cor->get('logDb'),
$dbParams['writerParams']['table'],
$dbParams['writerParams']['columnMapping']);
if (isset($dbParams['filterName'])) {
switch ($dbParams['filterName']) {
case 'Priority':
$writerDb->addFilter(new Zend_Log_Filter_Priority($dbParams['filterParams']['priority']));
break;
}
}
$logger->addWriter($writerDb);
}
*/
if( 'development' === APPLICATION_ENV) {
$fileParams = $this->_options['resources']['log']['file'];
if(!isset($fileParams) || !(is_array($fileParams)))
return;
$writerFile = new Zend_Log_Writer_Stream($fileParams['writerParams']['path'],$fileParams['writerParams']['mode']);
$writerFile->setFormatter(new Zend_Log_Formatter_Simple($fileParams['writerParams']['format']));
if (isset($fileParams['filterName'])) {
switch ($fileParams['filterName']) {
case 'Priority':
$writerFile->addFilter(new Zend_Log_Filter_Priority($fileParams['filterParams']['priority']));
break;
}
}
$logger->addWriter($writerFile);
}
$logger->setEventItem('user_agent', $_SERVER['HTTP_USER_AGENT']);
$logger->setEventItem('get_vars', serialize($_GET));
$logger->setEventItem('post_vars', serialize($_POST));
$logger->setEventItem('ip', $_SERVER['REMOTE_ADDR']);
$logger->setEventItem('username', $this->_username);
// This has issue of missing _stream, Using Custom Helper with Registry use force.
$this->_cor->set('logger', $logger, true);
$loggerRC = $this->_cor->get('logger', true);
// This also has issue of missing _stream, Using Custom Helper with apc Cache
$this->_cor->set('logger', $logger);
$loggerCC = $this->_cor->get('logger');
// This works perfectly.
Zend_Registry::set($this->_cor->createCacheId('loggerR'), $logger);
$loggerZ = Zend_Registry::get($this->_cor->createCacheId('loggerR'));
// This also seems to have issue of missing _stream, Using apc Cache directly
$cache = Zend_Registry::get('apcCache');
$cache->save($logger, $this->_cor->createCacheId('loggerC'));
$loggerC = $cache->load($this->_cor->createCacheId('loggerC'));
echo "<h3>Logger, local variable</h3>";
var_dump($logger);
echo "<h3>Logger, from Registry using custom helper</h3>";
var_dump($loggerRC);
echo "<h3>Logger, from apc cache using custom helper</h3>";
var_dump($loggerCC);
echo "<h3>Logger, from Zend_Registry, direct.</h3>";
var_dump($loggerZ);
echo "<h3>Logger, from apc Cache, Direct.</h3>";
var_dump($loggerC);
exit;
}
Helper_SCacheOrRegistry.php
class Helper_SCacheOrRegistry {
private $_source;
private static $_instance;
private $_functionsArray = array('Cache' => array(
'get' => '_getFromCache',
'set' => '_saveInCache',
'del' => '_deleteFromCache',
'exists' => '_existsInCache'),
'Registry' => array(
'get' => '_getFromRegistry',
'set' => '_saveInRegistry',
'del' => '_deleteFromRegistry',
'exists' => '_existsInRegistry',
)
);
public static function getInstance() {
if (!isset(self::$_instance)) {
$c = __CLASS__;
self::$_instance = new $c();
}
return self::$_instance;
}
private function _getSource($forceRegistry = null) {
if(true === $forceRegistry)
return Zend_Registry::getInstance();
if (Zend_Registry::getInstance()->offsetExists('apcCache'))
return Zend_Registry::get('apcCache');
else
return Zend_Registry::getInstance();
}
private function _isSourceCache() {
return (!$this->_source instanceof Zend_Registry);
}
public function createCacheId($id) {
return md5(',e#Q!u$#~\|3Pa^e1%oh&s0*<h(7)o-+h/t.' . $id);
}
public function set($key, $value, $forceRegistry = null) {
$this->_fire('set', $this->createCacheId($key), $value, $forceRegistry);
}
public function get($key, $forceRegistry = null) {
return $this->_fire('get', $this->createCacheId($key), null, $forceRegistry);
}
public function del($key, $forceRegistry = null) {
return $this->_fire('del', $this->createCacheId($key), null, $forceRegistry);
}
public function exists($key, $forceRegistry = null) {
return $this->_fire('exists', $this->createCacheId($key), null, $forceRegistry);
}
private function _fire($method, $key, $value = null, $forceRegistry = null) {
$this->_source = $this->_getSource($forceRegistry);
$call = ($this->_isSourceCache()) ?
$this->_functionsArray['Cache'][$method] : $this->_functionsArray['Registry'][$method];
return (isset($value)) ? $this->$call($key, $value) : $this->$call($key);
}
private function _getFromCache($key) {
return $this->_existsInCache($key);
}
private function _saveInCache($key, $value) {
if ($this->_existsInCache($key))
return false;
$this->_source->save($value, $key);
return true;
}
private function _deleteFromCache($key) {
if (!$this->_existsInCache($key))
return false;
$this->_source->remove($key);
return true;
}
private function _existsInCache($key) {
return $this->_source->load($key);
}
private function _getFromRegistry($key) {
if ($this->_existsInRegistry($key))
return unserialize($this->_source->get($key));
return false;
}
private function _saveInRegistry($key, $value) {
if ($this->_existsInRegistry($key))
return false;
$this->_source->set($key, serialize($value));
return true;
}
private function _deleteFromRegistry($key) {
if (!$this->_existsInCache($key))
return false;
$this->_source->offsetUnset($key);
return true;
}
private function _existsInRegistry($key) {
return $this->_source->isRegistered($key);
}
}
Output:
Logger, local variable
object(Zend_Log)[84]
protected '_priorities' =>
array
0 => string 'EMERG' (length=5)
1 => string 'ALERT' (length=5)
2 => string 'CRIT' (length=4)
3 => string 'ERR' (length=3)
4 => string 'WARN' (length=4)
5 => string 'NOTICE' (length=6)
6 => string 'INFO' (length=4)
7 => string 'DEBUG' (length=5)
protected '_writers' =>
array
0 =>
object(Zend_Log_Writer_Stream)[93]
protected '_stream' => resource(77, stream)
protected '_filters' =>
array
0 =>
object(Zend_Log_Filter_Priority)[94]
protected '_priority' => int 7
protected '_operator' => string '<=' (length=2)
protected '_formatter' =>
object(Zend_Log_Formatter_Simple)[95]
protected '_format' => string ' [ %ip% ] - [ %timestamp% ] [ %user_agent% ] - [ %username% ]
[ %priorityName% : %message% ]
[ POST: %post_vars% ]
[ GET: %get_vars% ]
' (length=161)
protected '_filters' =>
array
empty
protected '_extras' =>
array
'user_agent' => string 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.18 Safari/535.1' (length=99)
'get_vars' => string 'a:0:{}' (length=6)
'post_vars' => string 'a:0:{}' (length=6)
'ip' => string '127.0.0.1' (length=9)
'username' => string 'guest' (length=5)
protected '_defaultWriterNamespace' => string 'Zend_Log_Writer' (length=15)
protected '_defaultFilterNamespace' => string 'Zend_Log_Filter' (length=15)
protected '_defaultFormatterNamespace' => string 'Zend_Log_Formatter' (length=18)
protected '_origErrorHandler' => null
protected '_registeredErrorHandler' => boolean false
protected '_errorHandlerMap' => boolean false
protected '_timestampFormat' => string 'c' (length=1)
Logger, from Registry using custom helper
object(Zend_Log)[96]
protected '_priorities' =>
array
0 => string 'EMERG' (length=5)
1 => string 'ALERT' (length=5)
2 => string 'CRIT' (length=4)
3 => string 'ERR' (length=3)
4 => string 'WARN' (length=4)
5 => string 'NOTICE' (length=6)
6 => string 'INFO' (length=4)
7 => string 'DEBUG' (length=5)
protected '_writers' =>
array
0 =>
object(Zend_Log_Writer_Stream)[97]
protected '_stream' => int 0
protected '_filters' =>
array
0 =>
object(Zend_Log_Filter_Priority)[98]
protected '_priority' => int 7
protected '_operator' => string '<=' (length=2)
protected '_formatter' =>
object(Zend_Log_Formatter_Simple)[99]
protected '_format' => string ' [ %ip% ] - [ %timestamp% ] [ %user_agent% ] - [ %username% ]
[ %priorityName% : %message% ]
[ POST: %post_vars% ]
[ GET: %get_vars% ]
' (length=161)
protected '_filters' =>
array
empty
protected '_extras' =>
array
'user_agent' => string 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.18 Safari/535.1' (length=99)
'get_vars' => string 'a:0:{}' (length=6)
'post_vars' => string 'a:0:{}' (length=6)
'ip' => string '127.0.0.1' (length=9)
'username' => string 'guest' (length=5)
protected '_defaultWriterNamespace' => string 'Zend_Log_Writer' (length=15)
protected '_defaultFilterNamespace' => string 'Zend_Log_Filter' (length=15)
protected '_defaultFormatterNamespace' => string 'Zend_Log_Formatter' (length=18)
protected '_origErrorHandler' => null
protected '_registeredErrorHandler' => boolean false
protected '_errorHandlerMap' => boolean false
protected '_timestampFormat' => string 'c' (length=1)
Logger, from apc cache using custom helper
object(Zend_Log)[100]
protected '_priorities' =>
array
0 => string 'EMERG' (length=5)
1 => string 'ALERT' (length=5)
2 => string 'CRIT' (length=4)
3 => string 'ERR' (length=3)
4 => string 'WARN' (length=4)
5 => string 'NOTICE' (length=6)
6 => string 'INFO' (length=4)
7 => string 'DEBUG' (length=5)
protected '_writers' =>
array
0 =>
object(Zend_Log_Writer_Stream)[101]
protected '_stream' => int 0
protected '_filters' =>
array
0 =>
object(Zend_Log_Filter_Priority)[102]
protected '_priority' => int 7
protected '_operator' => string '<=' (length=2)
protected '_formatter' =>
object(Zend_Log_Formatter_Simple)[103]
protected '_format' => string ' [ %ip% ] - [ %timestamp% ] [ %user_agent% ] - [ %username% ]
[ %priorityName% : %message% ]
[ POST: %post_vars% ]
[ GET: %get_vars% ]
' (length=161)
protected '_filters' =>
array
empty
protected '_extras' =>
array
'user_agent' => string 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.18 Safari/535.1' (length=99)
'get_vars' => string 'a:0:{}' (length=6)
'post_vars' => string 'a:0:{}' (length=6)
'ip' => string '127.0.0.1' (length=9)
'username' => string 'guest' (length=5)
protected '_defaultWriterNamespace' => string 'Zend_Log_Writer' (length=15)
protected '_defaultFilterNamespace' => string 'Zend_Log_Filter' (length=15)
protected '_defaultFormatterNamespace' => string 'Zend_Log_Formatter' (length=18)
protected '_origErrorHandler' => null
protected '_registeredErrorHandler' => boolean false
protected '_errorHandlerMap' => boolean false
protected '_timestampFormat' => string 'c' (length=1)
Logger, from Zend_Registry, direct.
object(Zend_Log)[84]
protected '_priorities' =>
array
0 => string 'EMERG' (length=5)
1 => string 'ALERT' (length=5)
2 => string 'CRIT' (length=4)
3 => string 'ERR' (length=3)
4 => string 'WARN' (length=4)
5 => string 'NOTICE' (length=6)
6 => string 'INFO' (length=4)
7 => string 'DEBUG' (length=5)
protected '_writers' =>
array
0 =>
object(Zend_Log_Writer_Stream)[93]
protected '_stream' => resource(77, stream)
protected '_filters' =>
array
0 =>
object(Zend_Log_Filter_Priority)[94]
protected '_priority' => int 7
protected '_operator' => string '<=' (length=2)
protected '_formatter' =>
object(Zend_Log_Formatter_Simple)[95]
protected '_format' => string ' [ %ip% ] - [ %timestamp% ] [ %user_agent% ] - [ %username% ]
[ %priorityName% : %message% ]
[ POST: %post_vars% ]
[ GET: %get_vars% ]
' (length=161)
protected '_filters' =>
array
empty
protected '_extras' =>
array
'user_agent' => string 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.18 Safari/535.1' (length=99)
'get_vars' => string 'a:0:{}' (length=6)
'post_vars' => string 'a:0:{}' (length=6)
'ip' => string '127.0.0.1' (length=9)
'username' => string 'guest' (length=5)
protected '_defaultWriterNamespace' => string 'Zend_Log_Writer' (length=15)
protected '_defaultFilterNamespace' => string 'Zend_Log_Filter' (length=15)
protected '_defaultFormatterNamespace' => string 'Zend_Log_Formatter' (length=18)
protected '_origErrorHandler' => null
protected '_registeredErrorHandler' => boolean false
protected '_errorHandlerMap' => boolean false
protected '_timestampFormat' => string 'c' (length=1)
Logger, from apc Cache, Direct.
object(Zend_Log)[104]
protected '_priorities' =>
array
0 => string 'EMERG' (length=5)
1 => string 'ALERT' (length=5)
2 => string 'CRIT' (length=4)
3 => string 'ERR' (length=3)
4 => string 'WARN' (length=4)
5 => string 'NOTICE' (length=6)
6 => string 'INFO' (length=4)
7 => string 'DEBUG' (length=5)
protected '_writers' =>
array
0 =>
object(Zend_Log_Writer_Stream)[105]
protected '_stream' => int 0
protected '_filters' =>
array
0 =>
object(Zend_Log_Filter_Priority)[106]
protected '_priority' => int 7
protected '_operator' => string '<=' (length=2)
protected '_formatter' =>
object(Zend_Log_Formatter_Simple)[107]
protected '_format' => string ' [ %ip% ] - [ %timestamp% ] [ %user_agent% ] - [ %username% ]
[ %priorityName% : %message% ]
[ POST: %post_vars% ]
[ GET: %get_vars% ]
' (length=161)
protected '_filters' =>
array
empty
protected '_extras' =>
array
'user_agent' => string 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.18 Safari/535.1' (length=99)
'get_vars' => string 'a:0:{}' (length=6)
'post_vars' => string 'a:0:{}' (length=6)
'ip' => string '127.0.0.1' (length=9)
'username' => string 'guest' (length=5)
protected '_defaultWriterNamespace' => string 'Zend_Log_Writer' (length=15)
protected '_defaultFilterNamespace' => string 'Zend_Log_Filter' (length=15)
protected '_defaultFormatterNamespace' => string 'Zend_Log_Formatter' (length=18)
protected '_origErrorHandler' => null
protected '_registeredErrorHandler' => boolean false
protected '_errorHandlerMap' => boolean false
protected '_timestampFormat' => string 'c' (length=1)
Zend_Log shouldn't be serialized when stored.
Zend_Cache isn't an option because it required objects to be serialized as it stores only strings.
Zend_Registry wasn't working through helper class as there was some serialization going on due to the code. Removing that fixed the issue.
So in short:
Use Zend_Registry to store objects
Do not serialize when storing in Zend_Registry
I'm trying to unset a field before saving it, exactly in the executeCreate() function generated by sf. I'm using this:
$this->configuration->getForm()->getWidgetSchema()->offsetUnset('clients');
var_dump($this->configuration->getForm()->getWidgetSchema());
But after that the field "clients" is still there:
object(sfWidgetFormSchema)[180]
protected 'formFormatters' =>
array
empty
protected 'fields' =>
array
'id' =>
object(sfWidgetFormInputHidden)[211]
protected 'parent' =>
&object(sfWidgetFormSchema)[180]
protected 'requiredOptions' =>
array
...
protected 'attributes' =>
array
...
protected 'options' =>
array
...
'name' =>
object(sfWidgetFormInputText)[212]
protected 'parent' =>
&object(sfWidgetFormSchema)[180]
protected 'requiredOptions' =>
array
...
protected 'attributes' =>
array
...
protected 'options' =>
array
...
'clients' =>
object(sfWidgetFormInputText)[184]
protected 'parent' =>
&object(sfWidgetFormSchema)[180]
protected 'requiredOptions' =>
array
...
protected 'attributes' =>
array
...
protected 'options' =>
array
...
'_csrf_token' =>
object(sfWidgetFormInputHidden)[203]
protected 'parent' =>
&object(sfWidgetFormSchema)[180]
protected 'requiredOptions' =>
array
...
protected 'attributes' =>
array
...
protected 'options' =>
array
...
Any idea?
sf 1.4
Javi
You can unset form fields at form class, method configure:
class ClientsForm extends BaseClientsForm
{
public function configure()
{
unset($this['field1'], $this['field2']);
}
}
This removes field from form and from SQL query generated for saving this form