Zend Framework findBy sihirli yöntem?

2 Cevap php

Kullanmak yerine $this->fetchAll('email = ?',$email)->current() modeli sınıf içinde, $this->fetchByEmail($email) yapmak için bir yol var ya $this->findByEmail($email)?

Böyle sihirli bir yöntem Zend_Log zaten var, nerede yerine $myLogger->log("Something went wrong",Zend_Log::CRIT) sadece {[bazı funky yansıma yoluyla ($myLogger->crit("Something went wrong") ve automagically eşlenen alır yazmak (3)]} yöntemi).

Zend_Db sınıfları, yoksa benim için bunu yapmak için bir şey yazmak zorunda gidiyorum herhangi böyle bir şey olmadığını herkes biliyor mu?

2 Cevap

İstediğiniz özel bir işlevsellik için, özel bir işlev oluşturmak gerekir. Dürüst olmak gerekirse, sihirli __ call () işlevinin arkasında yatan mantık o kadar zor değil.

Böyle bir şey hile yapmak gerekir:

public function __call($function, $args)
{
	// Expects findBy to be the first part of the function
	$criteria = substr($function, 6);
	$criteria = strtolower($criteria);

	$select = $this->select()
			    ->from($this->_name)
			    ->where($criteria . ' = ?', $args);
}

Eğer diziler veya birden fazla ölçüt parametreleri gibi daha karmaşık davalarını istiyorsanız Açıkçası, daha iyi denetimi uygulamak gerekir, ancak bu temel fikir vermelidir.

According to the documentation you have to do it by yourself http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.extending.finders

Yani kendi oluşturmak veya gabriel1836 tarafından yayınlanmıştır birini kullanmanızı öneririz