laravel雄辩-如何选择用户
我有两张桌子: id为的用户表 以及用户Id为“发件人”且提供Id为“提供Id”的消息表 我想选择所有使用特定优惠id向发送邮件的用户 比如说 id为1的用户发送少量消息:laravel雄辩-如何选择用户,laravel,eloquent,Laravel,Eloquent,我有两张桌子: id为的用户表 以及用户Id为“发件人”且提供Id为“提供Id”的消息表 我想选择所有使用特定优惠id向发送邮件的用户 比如说 id为1的用户发送少量消息: Id from offer_id 1. 1, 5 2. 2, 5 3. 1, 5 4. 1, 3 我想选择发送offer_id=5的所有用户,因此id为1和2的用户 如何通过消息和用户类的雄辩来实现这一点? 我已经获得了offer\u id,因此我可以轻松地选择邮件: $messages
Id from offer_id
1. 1, 5
2. 2, 5
3. 1, 5
4. 1, 3
我想选择发送offer_id=5的所有用户,因此id为1和2的用户
如何通过消息和用户类的雄辩来实现这一点?
我已经获得了offer\u id,因此我可以轻松地选择邮件:
$messages=Message::where('offer_id',$id)代码>
但是如何选择用户呢
编辑:
我试着这样做:
在消息模型中:
public function fromContact()
{
return $this->hasOne(User::class, 'id', 'from');
}
然后在控制器中:
$contacts=$messages->fromContact代码>
但它给出了一个错误
编辑迁移:
Schema::create('messages', function (Blueprint $table) {
$table->increments('id');
$table->integer('from')->unsigned();
$table->integer('to')->unsigned();
$table->boolean('read')->default(false);
$table->integer('offer_id')->nullable();
$table->mediumText('body')->nullable();
$table->timestamps();
});
和错误:
"message": "Undefined property:
Illuminate\\Database\\Eloquent\\Builder::$fromContact",
您的查询生成器缺少一些闭包。当你使用
$messages = Message::where('offer_id', $id);
在使用闭包之前,您没有消息的实例,闭包是->first()
,->get()
,等等
$message->fromContact;
将导致一个错误,指出->fromContact
在Builder
实例上不可用。要使此工作正常,请使用
$messages = Message::where('offer_id', $id)->get();
foreach($messages AS $message){
$contacts = $message->fromContact;
}
由于循环中没有太多上下文,因此上面的代码不会执行任何操作,但是$messages->fromContact
也将是一个错误。要绕过此问题,请使用:
$message = Message::where('offer_id', $id)->first();
$contacts = $message->fromContact;
这会让你很好地了解出了什么问题以及如何处理
编辑
在多个消息
实例上循环时,将$Message->fromContact
推送到一个数组(或集合
)以供以后使用:
$messages = Message::with(['fromContact'])->where('offer_id', $id)->get();
// Note: Using `::with()` prevents additional database calls when using `$message->fromContact` in a loop.
$contacts = []; // or $contacts = collect([]);
foreach($messages AS $message){
$contacts[] = $message->fromContact; // or $contacts->push($message->fromContact);
}
你应该读一下。然后告诉我们你尝试了什么。我刚刚编辑了我的问题,也添加了你的迁移,当然,还有你得到的错误。我刚刚添加了它们。我确实给了你一个与@Timleis类似的答案,但它几乎是重复的,所以我删除了它。让我看看。。我需要一些练习,它给了我一个非常简单的错误:“消息”:“此集合实例上不存在[fromContact]属性。”
这意味着$message
或$messages
是一个集合,而不是消息
。你读过我关于使用循环的get()
和使用first()
的说明了吗?不用担心。在你做了几百(千)次之后,一切都会变得有意义;当您有一个生成器
实例、一个集合
、一个消息
等等时,您最终能够一目了然地分辨出来,以及基于此可以使用哪些方法。但要继续问问题;这是最好的学习方法:)哦,它有效,我声明$contacts=array()
然后foreach($messages as$message){$contacts[]=$message->fromContact;}