Laravel Illégal de l'opérateur et de la combinaison de la valeur d'Exception sur avec() avec belongsTo() rapport
J'ai un Appel de Modèle avec un belongsTo() rapport comme suit
class Call extends Model
{
public function campaign()
{
$callStart = $this->call_start;
return $this->belongsTo('App\Campaign','gsm_number','gsm_number')
->where(function($query) use($callStart){
$query->where('end_date','=','0000-00-00 00:00:00')
->orWhere('end_date','>=',$callStart);
})->where(function($query) use($callStart){
$query->where('start_date','=','0000-00-00 00:00:00')
->orWhere('start_date','<=',$callStart);
});
}
}
La logique de cette relation est que, chaque appel appartient à une campagne si gsm_numbers dans les deux tables correspondent et call_start de date_debut dans la Campagne n'est pas définie ou moins de call_start dans les Appels de modèle et de end_date dans le modèle de Campagne est se fanent pas définie ou il est plus grand que call_start de l'Appeler Modèle de
Dans le Contrôleur, je n':
$calls = Call::orderBy('call_start','DESC')->get(); //in simplest form
return view('calls')->with('calls',$calls);
En Vue pour les campagnes d'inscription-je afficher des informations sur la campagne ainsi à l'aide de la suite
@foreach($calls as $call)
{{ $call->campaign['name'] }}
@endforeach
Pas de problème mais j'ai besoin pour effectuer la même question avec des appels ajax, donc j'ai besoin d'appels et de données ainsi que des campagnes. J'ai donc effectuer les opérations suivantes
$calls = Call::with('campaign')->orderBy('call_start','DESC')
->get();
if($request->ajax()){
return $calls
}
Dans ce cas, je reçois exception InvalidArgumentException in Builder.php line 464:
Illegal operator and value combination.
De La Pile D'Exception:
in Builder.php line 464
at Builder->where('end_date', '>=', null, 'or')
at call_user_func_array(array(object(Builder), 'where'), array('end_date', '>=', null, 'or')) in Builder.php line 640
at Builder->where('end_date', '>=', null, 'or') in Builder.php line 656
at Builder->orWhere('end_date', '>=', null) in Call.php line 51
at Call->App\{closure}(object(Builder))
OriginalL'auteur Danish Altaf Satti | 2016-02-17
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas effectuer un null comparaison sur un champ datetime. Vous devez vous assurer de $callStart n'est pas null avant d'ajouter une clause where
->orWhere('end_date','>=',$callStart);
fonctionne parce que $d'appel. il contient des données. donc
$callStart = $this->call_start;
ne sera pas nulle. mais quand vous avez$calls = Call::with('campaign')->orderBy('call_start','DESC')->get();
le générateur de requête appels de votre relation 'campagne', et évalue votre
$callStart = $this->call_start;
nulle, puisque l'Appel n'est pas encore un modèle valide exemple, aucune donnée n'est définie pour le moment, donc call_start attribut va être nul à ce point."$callStart ne peut jamais être nulle" - les erreurs que vous avez posté, dit le contraire
Ce que je veux dire, c'est que les enregistrements dans la table sont tout à fait valable, sans null 'call_start colonne. Après plus de débogage uniquement lors de l'utilisation, $this->call_start dans belongsTo() relation arrive à être nulle parce que "$" ce n'est pas être correctement référencé. $this->call_start est nulle car $c'est vide. Pourquoi serait - $ - être cela est-il vide? Pouvez-vous le comprendre?
J'ai mis à jour ma réponse pour plus de précisions.
Merci beaucoup. maintenant, je comprends tout à fait. Vous avez cloué. Toute autre manière de l'accomplir?
OriginalL'auteur Ayo Akinyemi