laravel雄辩-如何选择用户

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为的用户表 以及用户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=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;}