Pergunta

Existe uma maneira simples de escrever uma função comum para cada um dos CRUD (create, retreive, update, delete) operações em PHP Sem usar nenhuma estrutura. Por exemplo, desejo ter uma única função de criação que pegue o nome da tabela e os nomes de campo como parâmetros e insere dados em um mySQL database. Outro requisito é que a função seja capaz de suportar junções, ou seja, que possa inserir dados em várias tabelas, se necessário.

Sei que essas tarefas podem ser realizadas usando uma estrutura, mas por várias razões - muito longas para explicar aqui - não posso usá -las.

Foi útil?

Solução

Eu escrevi exatamente isso, é uma espécie de andaime polido. É basicamente uma classe cujo construtor leva a tabela a ser usada, uma matriz contendo nomes e tipos de campo e uma ação. Com base nessa ação, o objeto chama um método para si mesmo. Por exemplo:

Esta é a matriz que eu passo:

$data = array(array('name' => 'id', 'type' => 'hidden')
          , array('name' => 'student', 'type' => 'text', 'title' => 'Student'));

Então eu chamo o construtor:

new MyScaffold($table, 'edit', $data, $_GET['id']);

No caso acima, o construtor chama o método 'Editar', que apresenta um formulário exibindo dados da tabela $, mas apenas campos que configurei na minha matriz. O registro que ele usa é determinado pelo método $ _GET. Neste exemplo, o campo 'Student' é apresentado como uma caixa de texto (daí o tipo 'texto'). O 'título' é simplesmente o rótulo usado. Sendo 'escondido', o campo de identificação não é mostrado para edição, mas está disponível para o programa para uso.

Se eu tivesse passado 'excluir' em vez de 'editar', ele excluiria o registro da variável get. Se eu passe apenas com um nome de tabela, ele não seria padrão para uma lista de registros com botões para editar, excluir e novo.

É apenas uma classe que contém todo o CRUD com muita personalização. Você pode torná -lo tão complicado ou simples quanto desejar. Ao torná -lo uma classe genérica, posso entrar em qualquer projeto e apenas passar instruções, informações da tabela e informações de configuração. Por uma tabela, não quero permitir que novos registros sejam adicionados através do andaime; nesse caso, eu poderia definir "Newbutton" para ser falso na minha matriz de parâmetros.

Não é uma estrutura no sentido convencional. Apenas uma classe independente que lida com tudo internamente. Existem algumas desvantagens nisso. Os principais devem ser que todas as minhas tabelas devem ter uma chave primária chamada 'ID', você pode fugir sem isso, mas complicaria as questões. Outro é que uma grande matriz detalhando informações sobre cada tabela a ser gerenciada deve ser preparada, mas você precisa fazer isso apenas uma vez.

Para um tutorial sobre essa ideia, veja aqui

Outras dicas

Se você tentar escrever essa função, em breve descobrirá que acabou de perceber mais uma estrutura.

É claro que não, é por isso que essas estruturas existem e implementam instalações CRUD. Eu primeiro tentaria convencer quem for necessário para realmente usar uma estrutura existente e, segundo, falhando no acima, ia dar uma ou duas delas e copiar as idéias de implementação. Falha em tudo o que você pode dar uma olhada http://www.phpobjectgenerator.com/

Sem estruturas, inclui sem nenhum ORMS? Caso contrário, sugiro dar uma olhada Doutrina ou Impulsionar.

Eu sei do jeito que você se sente.

Porco.dbobject é uma classe simples da qual você pode estender seus objetos. Ele só precisa de uma classe de conexão de banco de dados para funcionar.

Por favor verifique:www.schizofreend.nl/pork.dbobject/

(Ah, sim, yuk @ php objeto gerador. Alerta de inchaço! Quem quer ter essas funções personalizadas em todas as aulas ???)

Eu acho que você deve escrever suas próprias funções que alcançam CRUD, a menos que você esteja estressado pelo tempo. Pode ser uma estrutura por conta própria, mas você precisa aprender o que a estrutura faz antes de gritar a estrutura .... também se torna útil saber essas coisas porque você pode facilmente pegar bugs na estrutura e consertá -los. ....

Eu me deparei com essa pergunta há algum tempo e acabei sem encontrar nada naquela época que fez isso de uma maneira leve.

Acabei escrevendo o meu próprio e recentemente cheguei a abrir o fornecimento (licença do MIT), caso outros possam achar útil. Está no Github, fique à vontade para conferir e usá -lo se atender às suas necessidades!

https://github.com/arthurd/php-crud-model-class

Espero que ele encontre algum uso - adoraria ver algumas melhorias / contribuições, também fique à vontade para enviar solicitações de puxão! :-)

É possível, mas eu não recomendaria.

Se não houver absolutamente nenhuma maneira de usar uma estrutura, você poderá criar uma classe base que todos os outros objetos de modelo estendam. Você pode fazer a classe base gerar e executar SQL com base em get_class() e get_class_vars().

É possível? Sim.
Eu recomendaria? Não

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top